게임 엔진/Unity

Unity 1일차 - Unity 설치 및 Hello, World 출력

FakeZero 2021. 5. 25. 06:56

Unity 강좌에 오신 여러분, 진심으로 환영합니다.

오늘부터 Unity를 써서 5~6개 정도의 미니게임들을 만들며 Unity 게임 엔진을 한번 다뤄보도록 하겠습니다.

(강좌에 앞서 본 강좌는 기타무라 마나미씨가 저술한 [유니티 교과서]라는 책을 기반으로 만들어졌음을 알려드립니다.)

 


일단 본격적인 이야기에 앞서 게임 엔진을 설치하며 진행해보도록 하죠.

  https://unity.com/kr

 

유니티 - Unity

Unity is the ultimate game development platform. Use Unity to build high-quality 3D and 2D games, deploy them across mobile, desktop, VR/AR, consoles or the Web, and connect with loyal and enthusiastic players and customers.

unity.com

해당 사이트에 들어가면 이런 화면이 뜰껍니다.

여기서부터 차례차례 진행해보도록 하겠습니다.

해당 작업을 끝내면 'UnityHubSetup.exe' 파일이 받아질 것이니 실행해서 컴퓨터에 설치해 주세요. 그러면.

이런 아이콘이 바탕화면에 생길 것입니다.(바탕화면에 없다면 설치도중 바탕화면에 바로가기를 만드는 설정을 해제한 것이니 윈도우의 검색기능을 사용해 설치된 Unity Hub를 실행합시다.) 이제 Unity Hub를 실행해봅시다.

실행하게 되면 이런 화면이 생성될 껍니다. 저는 테스트를 위해 여러번 프로젝트를 생성한 것이니 여러분들은 이 칸이 비어있을 것입니다. 이 상태에서 왼쪽의 설치 탭을 눌러봅시다.

이 칸에서도 여러분들은 아무것도 없는 것이 정상입니다. 이 창에서 추가 버튼을 눌러봅시다.

 

이러한 창이 뜰텐데 여러분들은 Unity 2021.1.7f1버전을 선택해서 다음 버튼을 누르시면 됩니다.(한마디로 최신버전을 설치하시면 됩니다.)

(저는 이미 설치되어 있기 때문에 비활성화 되어있는 것입니다.)

다음 버튼을 누르면 이런화면이 나타납니다. Unity에 필요한 모듈을 골라서 설치하는 화면입니다. 이번 강좌에서는 기본적으로 Microsoft Visual Studio Community 2019와 자신의 핸드폰 기종에 따라 Android기반의 핸드폰이라면 Android Build Support, iOS기반(아이폰 등의 애플사의 핸드폰)의 핸드폰이라면 iOS Build Support에 체크를 하시면 됩니다. 기본적으로 게임은 PC에서 실행해보겠지만 다 만든 후에는 핸드폰에서도 해볼 수 있도록 하기 위해서 미리 설치하겠습니다. 체크가 끝났으면 다음을 누르시면 됩니다.

다음과 같이 최종 사용자 라이선스 계약 등의 동의사항들이 나옵니다. 모두 동의 하시고 마지막의 완료 버튼까지 누르시면 설치가 시작됩니다.


설치가 되는 동안 몇 가지 얘기를 해보도록 하죠.

 

  먼저 게임 엔진이란 게임을 만드는 프로그램을 이야기합니다. 유명한 오픈 소스 게임 엔진으로 예를 들면 에픽 게임즈의 언리얼 엔진, 그리고 오늘 저희가 사용하는 Unity Technologies의 Unity 등등이 있습니다.

  게임 엔진은 이렇게 타사에서 만든 게임 엔진을 사용하기도 하지만 게임 회사가 커지고 예산이 많아 지게되면 자체적으로 게임 엔진을 개발하는 경우가 많습니다. 따라서 위에서 언급한 오픈 소스 게임 엔진 외에도 SEGA의 헤지혹 엔진, 캡콤의 RE 엔진 등, 게임사에서 자체 개발한 엔진을 쓰는 경우도 많습니다.

 

  이번에 저희가 다룰 게임 엔진은 Unity Technologies의 Unity 입니다. 다른 엔진들의 비해 프로그램이 비교적 가볍고 게임 제작이 쉬운 편이라 많은 게임 개발자들이 애용하는 게임 엔진입니다. 아마 인디게임을 플레이 해보신 분들은 게임을 실행할때 Unity 로고를 보신적이 꽤 있을껍니다.

 

  이번에 사용하는 게임 엔진인 Unity는 C#이라는 프로그램 언어를 사용합니다. 마이크로소프트에서 개발된 언어로 저희가 이미 동아리에서 배우고 있는 C언어(또는 C++)하고는 상당히 다른 문법을 사용하며 프로그래밍 언어 자체도 절차적 프로그래밍 언어인 C언어와는 달리 객체 지향 프로그래밍 언어입니다. 그래서 저희가 평소에 사용하는 C언어와는 확연히 차이가 드러납니다. 그러나 프로그래밍 언어의 본질은 바뀌지 않기 때문에 변수 지정, 조건문 사용등의 대부분의 요소는 비슷합니다. 그러니 혹시라도 C#에 대해서 공부해보고 싶은 사람들은 스스로 찾아보시는 것도 도움이 될 것입니다. 하지만 C#까지 강의 하기에는 시간이 너무 오래걸리므로, 본 강좌에서는 Unity에서 사용할 수 있는 몇 가지 함수들과 함께 간단한 프로그램만을 짜 보도록 하겠습니다.

 

  시간이 되면 이 블로그에 C#에 대한 기본적인 강의도 올려보도록 하죠. C#에 대한 강의가 완성되면 링크를 이곳에 남겨두도록 하겠습니다.

 

  그리고 하나 더, 게임을 개발하는 데에는 원래 많은 인력이 들어갑니다. 캐릭터 디자이너, 애니메이터, 게임 프로그래머 등등등 굉장히 많은 직업을 가진 사람들이 게임을 만드는데 들어갑니다. 이는 보통 게임을 클리어하면 나오는 엔딩 크래딧에서도 알 수 있는 내용이죠. 하지만 저희는 이러한 작업들을 모두 혼자서 해야하므로 강좌를 시청하고 따라하는데 시간이 걸릴 수 있습니다. 그러니 인내심을 가지고 잘 따라와주셨으면 합니다.


Unity가 전부 설치 되었다면 설치 탭에 Unity 2021.1.7f1 버전이 설치된 것을 확인 할 수 있을 것입니다.

이제 본격적으로 프로젝트를 생성하고 게임엔진을 다뤄보도록 하겠습니다. 먼저 프로젝트를 생성해보겠습니다. 프로젝트 생성은 다음과 같은 절차를 시행하면 됩니다.

다음과 같은 화면이 창이 나타나면 프로젝트 생성에 성공한 것입니다. 이제 로딩이 끝날 때까지 기다립시다.

 

이번에 저희가 먼저 만들 게임은 2D게임입니다. 3D게임을 만드는 법은 만약 시간이 되면 더 다루도록 하겠습니다.

다음과 같은 화면이 나오면 성공입니다. 다만 갑자기 여러가지 정보가 한꺼번에 들어오니 뭘 어떻게 해야할지 감이 안잡힐 수도 있습니다. 하지만 어려울 것이 하나도 없습니다. 게임 엔진 또한 사람이 사용하도록 설계된 프로그램이며 따라서 사람이 사용하기에 가장 편하도록 GUI(Graphic User Interface)가 설정되어 있습니다. 그러니 하나하나씩 알아보도록 합시다.

①Scene 뷰:

게임을 구성하는 메인 화면 입니다. 주로 리소스를 배치해 게임 씬을 작성합니다.

 

②Hierarchy 창:

Scene 뷰에 배치한 오브젝트 이름을 목록으로 표시합니다. 오브젝트 사이의 계층 구조를 표시하거나 편집할 수 있습니다.

 

③Project 창:

게임에서 사용하는 리소스를 관리합니다. 이미지나 음원 등 리소스를 드래그 & 드롭하면 게임 리소스로 추가됩니다.

 

④Inspector 창:

Scene 뷰에서 선택한 오브젝트의 상세 정보가 나타납니다. 이 창에서 오브젝트의 좌표, 회전, 크기(=스케일. 앞으로는 스케일이라는 말을 더 자주 쓸 껍니다.), 색, 모양 등을 설정합니다.

 

⑤조작 도구:

Scene 뷰에 배치한 오브젝트의 좌표, 회전 크기를 조절할 수 있고, Scene 뷰의 보이는 방향을 조정할 수 있습니다. 일단은 왼쪽부터의 4개만 기억하면 됩니다. 가장 왼쪽부터 화면 이동 도구, 오브젝트 이동 도구, 오브젝트 회전 도구, 오브젝트 스케일 조정 도구입니다. 즉, Scene 뷰에서 화면을 움직이거나 배치한 오브젝트를 마음대로 조작할 수 있는 도구들입니다. 다만 화면을 움직이는 것에 관해선 더 편한 방법이 있으니 나중에 설명해드리도록 하겠습니다.

 

⑥실행 도구:

만들어진 게임을 시험적으로 실행하거나 정지시킬 수 있습니다.

①Game 뷰:

게임을 실행했을 때 보이는 방향을 확인할 수 있습니다. 이외에도 게임의 처리 속도나 과부하가 걸리는 곳 등을 분석할 수 있습니다.

 

②Console 창:

프로그램에 오류가 있을 때 그 내용을 표기합니다. 또한 프로그램에 따라 임의의 수치나 문자열을 표시할 수도 있습니다.

 

자, 보셨죠? 뭔가 길게 써놨지만 다들 알만한 기능만 있습니다. 게임 제작에 필요한 것들을 보기 쉽게 정리하고 조작할 수 있도록 한 것이 바로 이 형태인 것입니다. 자 그럼 이제 게임 엔진을 다뤄봅시다.

 

오늘 할 것은 간단합니다. Console 창에 프로그래밍의 대명사, "Hello, World"를 출력해 볼 겁니다.

Project 창의 빈 공간에 마우스로 우클릭을 한 후에 Create -> C# Script를 눌러서 C# 스크립트를 생성해서 이름을 지정해주도록 합시다.

다음과 같이 C# Script가 생성되면 성공입니다. 다음은 이 스크립트를 적용할 게임 내의 오브젝트가 필요합니다. 이번엔 특별히 형상이 필요한 것이 아니므로 빈 오브젝트를 생성하도록 하겠습니다.

Hierarchy 창에서 +버튼을 누르면 위 사진과 같은 상태가 됩니다. 여기서 Create Empty를 클릭하면

다음과 같이 GameObject라는 이름의 빈 오브젝트가 생성됩니다. 빈 오브젝트는 보이는 것처럼 게임에 형상적인 무언가를 추가하는 것은 아닙니다. 그러나 분명히 존재하는 오브젝트이기 때문에 스크립트 등을 통해 게임에 영향을 줄 수 있습니다.

 

이제 생성한 빈 오브젝트에 C# 스크립트를 적용해 보도록 하겠습니다.

방법은 간단합니다. Project 창의 C# 스크립트를 마우스로 끌어다가 적용할 오브젝트에 놓으면 됩니다. 이 과정을 거치면

위 사진과 같이 오브젝트에 스크립트가 적용되게 됩니다. 적용이 되었는지는 Hierarchy 창에서 오브젝트를 클릭하면 오른쪽의 Inspector 창에서 확인할 수 있습니다.

 

이제 C# 스크립트를 수정해서 Console 창에 "Hello, World"를 출력해보겠습니다.

C# 스크립트를 더블 클릭하게 되면 다음과 같이 비주얼 스튜디오가 열리며 스크립트를 수정할 수 있게 됩니다.

위에서도 얘기했듯이 C#은 C언어와 문법이 다르기 때문에 프로그램 구조들이 낮설 수 있습니다. 그러나 기본적인 알고리즘은 C언어와 별로 다르지 않습니다. 함수를 쓰면 { }안의 실행문들이 차례대로 실행이 됩니다.

 

본 강좌에서는 C#을 전부 설명하지는 않으니 Unity에 사용할 수 있는 지식만을 소개하도록 하겠습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

지금 여러분들은 위와 같은 코드가 짜여져 있을껍니다. 이 코드가 무엇을 의미하는지 알려드리도록 하겠습니다.

using System.Collections;
using System.Collections.Generic;

이 코드들 중 using 키워드(간단하게 C언어의 함수라고 봐도 무난할 것 같습니다.)는 C언어의 import와도 비슷한 기능을 합니다. 이 두 코드들은 데이터를 저장하는 형, 즉, 자료형을 제공합니다. 이 코드들은 변형시킬 일이 거의 없습니다.

using UnityEngine;

이 코드는 Unity가 동작하는 데 필요한 기능을 제공합니다. 이 코드 또한 변형시킬 일이 거의 없습니다.

public class Test : MonoBehaviour
{

}

이 코드는 클래스 이름을 정합니다. C#은 객체 지향 프로그래밍 언어이기 때문에 작성한 프로그램은 클래스 단위로 관리됩니다. Unity에서는 Unity에서 생성한 C# 스크립트의 이름대로 클래스의 이름이 지정되고 있습니다.

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }

이 부분은 메서드라고 합니다. Unity에서 실행되는 스크립트들은 이 안에 있는 프로그램들이 실행되게 됩니다.

 

여기서 void Start()라고 되어있는 Start 메서드와 void Update()라도 되어 있는 Update 메서드는 차이가 있는데, Start 메서드 안의 프로그램은 스크립트가 처음 실행 될 때 최초 1회만 실행이 되고 Update 메서드 안의 프로그램은 게임이 진행되면 계속 반복해서 실행됩니다. C언어에서는 프로그램을 반복 실행하기 위해서 while 등의 반복문을 사용했지만 이곳에서는 Update 메서드가 비슷한 기능을 합니다.

 

스크립트가 실행이 되면 바로 Start 메서드가 실행되고 그 다음 Update 메서드가 반복해서 실행되게 됩니다.

 

자, 그럼 이제 "Hello, World"를 실행하는 방법을 알아보도록 합시다.

C# 스크립트에서 Console 창에 출력할 수 있게 하는 키워드는

Debug.Log(출력 내용);

을 사용합니다. 이번엔 최초 1회만 실행하면 되므로 Start 메서드 안에 프로그램을 입력하겠습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("Hello, World");
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

 다음과 같이 void Start()의 { } 안(앞으로는 블록이라고 부르도록 하겠습니다.)에 "Hello, World"를 출력하는 함수를 입력했다면 비주얼 스튜디오의 저장 버튼을 눌러 작성한 스크립트를 저장하고 이제 다시 유니티로 돌아가 보겠습니다.

C# 스크립트 작성 후, 저장에 성공했다면 Unity에서 로딩창이 뜨며, 로딩이 끝나면 Project 창의 C# 스크립트 파일을 선택하고 난 후의 Inspector 창에 변경된 프로그램이 보일 것입니다.

 

이제 스크립트 작성까지 끝났으니 실행도구의 맨 왼쪽, 플레이 버튼을 눌러서 게임을 실행해봅시다.

이렇게 콘솔창에 "Hello, World"가 출력되면 성공입니다.

 

오늘은 여기까지입니다. 이제 해당 Scene을 저장하도록 하겠습니다.

Unity창의 왼쪽 위의 File 탭을 눌러서 Save As를 눌러 Scene을 저장하도록 합시다. 단, Scene을 저장할 때는 자신이 지정한 프로젝트의 이름으로 되어있는 폴더의 Assets 폴더 안에서만 저장이 가능하다는 것을 잊지 마시길 바랍니다.

 

저장에 성공하면 Project 창에 저장한 Scene 파일이 새로 생긴것을 확인 할 수 있습니다.


이렇게 해서 Unity의 몇 가지 설정들은 대부분 둘러본 것 같습니다. 다음 시간에도 C# 스크립트를 중점적으로 다뤄보도록 하겠습니다. 질문이 있으면 댓글로 질문 바랍니다.

 

수고하셨습니다.