유니티3D(Unity3D 이하 유니티)는 멀티 플랫폼용 게임 개발을 할 수 있게 해주는 혁신적인 2D 및 3D 게임 엔진이다. PC 및 맥(Mac) 기반에서 유니티 무료 버전으로 모든 어플리케이션을 개발할 수 있다. 무료 버전에는 몇 가지 기능(실시간 그림자, 동영상 플레이 등)이 빠져 있지만 독립 개발자나 이제 막 시작하는 개발사 등에게 자금에 대한 부담을 덜어주는 최고의 라이선스 정책이다.
유니티3D(Unity3D)란 무엇인가?
유니티는 게임 엔진으로 알려져 있지만 게임 이외에도 앱, 건축, 디자인, 인테리어, 시뮬레이션, 의학, 군사 등 다양한 분야에서 활용되는 개발 플랫폼이다. 유니티사에서 개발한 이 게임 엔진은 2005년 유니티 1.0을 출시한 이래 세계 엔진 Top5에 선정됐고, 2010년 기술 혁신상을 수상했으며, EA 등의 거대 기업들에서도 정식으로 도입하고 있다.
유니티의 특장점
1. 무료 버전 제공
유니티는 무료로 사용할 수 있는 프리(Free) 버전과 돈을 주고 구입하는 프로(Pro) 버전이 있다. 유니티 무료 버전으로 PC 및 웹 게임을 개발할 수 있다. 무료 버전에는 몇 가지 기능 빠져 있지만 이것만으로도 충분히 게임을 개발할 수 있다.
유니티는 무료로 사용할 수 있는 프리(Free) 버전과 돈을 주고 구입하는 프로(Pro) 버전이 있다. 유니티 무료 버전으로 PC 및 웹 게임을 개발할 수 있다. 무료 버전에는 몇 가지 기능 빠져 있지만 이것만으로도 충분히 게임을 개발할 수 있다.
2. 멀티 플랫폼 지원
유니티 프로 버전을 구매하면 PC 게임과 웹 게임 개발이 가능하며, 여기에 애드온을 추가해 스마트폰이나 XBox, PS3 등에서 실행하는 게임을 개발할 수 있다.
유니티 프로 버전을 구매하면 PC 게임과 웹 게임 개발이 가능하며, 여기에 애드온을 추가해 스마트폰이나 XBox, PS3 등에서 실행하는 게임을 개발할 수 있다.
3. 통합 개발 환경 제공
유니티는 게임의 개발과 실행 환경을 통합함으로써 개발 도중 언제라도 게임을 실행시켜 테스트해볼 수 있다. 게임을 테스트하는 도중에는 각종 변수의 상태가 모니터링 될 뿐 아니라 변수의 값을 직접 바꿔서 게임의 상태를 관찰할 수 있다(그림 2).
유니티는 게임의 개발과 실행 환경을 통합함으로써 개발 도중 언제라도 게임을 실행시켜 테스트해볼 수 있다. 게임을 테스트하는 도중에는 각종 변수의 상태가 모니터링 될 뿐 아니라 변수의 값을 직접 바꿔서 게임의 상태를 관찰할 수 있다(그림 2).
4. 다양한 3D 모델링 툴 지원
게임에서 그래픽 이미지는 필수적인 요소이며, 3D 게임을 만들기 위해서는 캐릭터를 2D 및 3D로 모델링 해야 한다. 유니티는 다양한 파일 포맷을 지원하며 3D 모델링 툴 중에는 무료로 배포되는 것들이 있으므로 이것을 사용하면 불법복제의 문제에서 벗어날 수 있다.
5. 물리 기반 엔진
물리 기반 엔진은 개발자로 하여금 복잡하고 어려운 물리학과 수학에서 벗어나 보다 창의적인 분야에 집중할 수 있게 해준다. 유니티는 게임 개발에 필수적인 물리와 수학을 자동으로 처리한다. 예를 들어 포탄을 발사할 때나 골프공을 타격했을 때의 포탄과 골프공의 비행 궤도와 낙하지점 계산, 공이 바운드됐을 때의 운동 등은 매우 복잡한 물리학적 원리와 수식이 필요하지만, 유니티는 이와 같은 처리를 자동으로 수행한다. 중력의 영향, 질량, 물체의 탄성 등만 설정해주면 나머지는 모두 유니티가 알아서 해줄 것이다. 따라서 개발자는 복잡한 물리와 수학을 떠나 자신이 구현하고 싶은 부분에만 집중할 수 있다.
6. 자바스크립트,C#, Boo 스크립트 사용
스크립트(Script)는 전문적인 프로그래밍 언어가 아닌 일종의 간이 언어로 작성된 짧은 프로그램이나 명령어들이다. C나 C++와 같은 언어들에 비해 제한된 능력을 지니고 있지만 프로그램을 쉽고 빠르게 작성할 수 있으며, 언어의 제한적인 기능만 사용하므로 초심자들이 배우기가 쉽다는 장점이 있다.
유니티 프로그램은 모두 짧고 간결한 스크립트 형태로 작성한다. 유니티는 개발자들이 주로 사용하는 언어를 지원하기 위해 자바스크립트, C#, Boo 스크립트를 사용할 수 있도록 했으므로 자신이 즐겨 사용하는 언어로 게임을 개발할 수 있다. 유니티의 스크립트는 해당 언어의 가장 기본적인 기능만 사용하므로 프로그래밍 언어에 대한 깊은 지식이 없어도 게임을 개발하는 것이 가능하다. 유니티에서 요구되는 것은 개발 언어의 지식이 아니라 유니티가 제공하는 각종 함수의 기능에 대한 이해와 활용 능력이므로 초심자와 유능한 프로그래머 사이에 그다지 큰 차이는 없다.
7. 체계적인 레퍼런스 제공
유니티는 인터넷을 통해 매우 체계적이고 자세한 레퍼런스 매뉴얼을 제공한다. 유니티의 거의 모든 기능에 대해 소스 코드를 제공하므로 그 기능과 활용법을 쉽게 배울 수 있다.
유니티 설치
유니티는 앞에서 언급한 바와 같이, 누구나 사용할 수 있는 무료 버전과 안드로이드 등의 플랫폼 게임을 개발할 수 있는 프로버전이 있다. 유니티는 웹에서 다운받아 설치하며, 무료 버전에는 프로 버전을 30일간 사용할 수 있는 체험판이 포함돼 있다.
1. 유니티 다운로드
unity3d.com이 유니티사의 공식 홈페이지이며, 한국 지사는 unity3dkorea.com이다. 아래의 사이트에 접속해서 [Download] 메뉴를 클릭한다(그림 5).
unity3d.com이 유니티사의 공식 홈페이지이며, 한국 지사는 unity3dkorea.com이다. 아래의 사이트에 접속해서 [Download] 메뉴를 클릭한다(그림 5).
2. 유니티 설치
다운받은 UnitySetup-3.5.1.exe를 실행하면 유니티가 설치된다(그림 6). 유니티는 한글 사용자 계정을 인식하지 못하므로 PC의 사용자가 한글(예 사용자)로 되어 있는 경우에는 새로운 사용자 계정을 영문으로 만든 후 새로운 계정으로 로그인한 후에 유니티를 설치한다.
다운받은 UnitySetup-3.5.1.exe를 실행하면 유니티가 설치된다(그림 6). 유니티는 한글 사용자 계정을 인식하지 못하므로 PC의 사용자가 한글(예 사용자)로 되어 있는 경우에는 새로운 사용자 계정을 영문으로 만든 후 새로운 계정으로 로그인한 후에 유니티를 설치한다.
3. 유니티 사용자 등록
유니티의 설치가 끝나면 자동으로 유니티가 실행된다. 이 때 사용자인증 창이 나타나므로 [Internet activation]을 선택하고 [다음] 버튼을 누른다.
잠시 후 웹브라우저에 사용자 등록 창이 나타난다. 이메일과 회사 이름을 입력한 후 [Start Pro/iOS Trial] 버튼을 클릭한다(그림 8). 이 버튼은 유니티 무료 버전에 한 달간 프로 버전을 사용할 수 있는 옵션이다. 이어 사용자의 세부적인 내용을 입력하는 창이 나타나므로 필요한 항목을 모두 입력한다.
유니티의 설치가 끝나면 자동으로 유니티가 실행된다. 이 때 사용자인증 창이 나타나므로 [Internet activation]을 선택하고 [다음] 버튼을 누른다.
잠시 후 웹브라우저에 사용자 등록 창이 나타난다. 이메일과 회사 이름을 입력한 후 [Start Pro/iOS Trial] 버튼을 클릭한다(그림 8). 이 버튼은 유니티 무료 버전에 한 달간 프로 버전을 사용할 수 있는 옵션이다. 이어 사용자의 세부적인 내용을 입력하는 창이 나타나므로 필요한 항목을 모두 입력한다.
유니티의 인터페이스
유니티를 처음 실행하면 데모 게임 앵그리봇(AngryBots)가 나타난다. 이 상태에서 플레이 버튼을 누르면 곧바로 게임이 시작된다. A,
S, D, F 키로 캐릭터를 이동하고 마우스는 캐릭터의 방향을 설정한다. 유니티는 기본적으로 5개의 탭으로 구성되 어 있다(그림 9).
S, D, F 키로 캐릭터를 이동하고 마우스는 캐릭터의 방향을 설정한다. 유니티는 기본적으로 5개의 탭으로 구성되 어 있다(그림 9).
1. 게임 디자인
게임을 디자인하는 탭이다. 여기에 필요한 게임 오브젝트(Game Object 이하 오브젝트)를 설치하면 카메라에 비치는 오브젝트가 게임 실행 탭에 나타난다. 카메라도 게임 오브젝트의 일종이다.
게임을 디자인하는 탭이다. 여기에 필요한 게임 오브젝트(Game Object 이하 오브젝트)를 설치하면 카메라에 비치는 오브젝트가 게임 실행 탭에 나타난다. 카메라도 게임 오브젝트의 일종이다.
2. 게임 실행
실제로 게임을 실행하는 탭이다. 유니티에 있는 플레이(▶) 버튼을 누르면 게임 실행 탭에서 게임이 실행된다.
실제로 게임을 실행하는 탭이다. 유니티에 있는 플레이(▶) 버튼을 누르면 게임 실행 탭에서 게임이 실행된다.
3. 하이어라키
하이어라키(Hierarchy)는 계층 구조라고도 한다. 게임 디자인 탭에 설치된 각종 오브젝트를 계층적으로 관리한다.
하이어라키(Hierarchy)는 계층 구조라고도 한다. 게임 디자인 탭에 설치된 각종 오브젝트를 계층적으로 관리한다.
4. 프로젝트
유니티의 프로그램은 프로젝트(Project) 단위로 관리한다. 프로젝트탭은 게임 개발에 필요한 프로그램과 각종 리소스 등을 관리한다.
5. 인스펙터
프로젝트에 사용되는 오브젝트와 각종 리소스의 속성등을 설정한다.
게임 오브젝트 설치
1. 새 프로젝트 시작
유니티의 기능을 알아보기 위해 새로운 프로젝트를 시작하자. [File▶New Project] 메뉴를 클릭한다. [그림 10]과 같이 패키지를 추가하는 창이 나타난다. 우선 아무 것도 선택하지 않은 상태에서 [Create] 버튼을 클릭한다.
새로운 프로젝트가 시작되면 디자인 탭에는 카메라만 나타난다.
마우스 휠을 이용해서 디자인 탭의 화면을 확대 혹은 축소할 수 있으며, 마우스 오른쪽 버튼을 누르고 디자인 탭을 드래그하면 화면이 이동한다. 또, crtl 키를 누른 상태로 왼쪽 버튼을 드래그하면 화면을 바라보는 각도가 바뀐다. 여기에서 설정하는 내용은 디자인에만 적용되며 실제의 게임은 카메라가 보는 내용이 표시된다.
유니티의 기능을 알아보기 위해 새로운 프로젝트를 시작하자. [File▶New Project] 메뉴를 클릭한다. [그림 10]과 같이 패키지를 추가하는 창이 나타난다. 우선 아무 것도 선택하지 않은 상태에서 [Create] 버튼을 클릭한다.
새로운 프로젝트가 시작되면 디자인 탭에는 카메라만 나타난다.
마우스 휠을 이용해서 디자인 탭의 화면을 확대 혹은 축소할 수 있으며, 마우스 오른쪽 버튼을 누르고 디자인 탭을 드래그하면 화면이 이동한다. 또, crtl 키를 누른 상태로 왼쪽 버튼을 드래그하면 화면을 바라보는 각도가 바뀐다. 여기에서 설정하는 내용은 디자인에만 적용되며 실제의 게임은 카메라가 보는 내용이 표시된다.
2. 게임 오브젝트 설치
[GameObject▶Create Other] 메뉴의 3번째 부분에 주로 사용하는 오브젝트가 수록돼 있다[그림 12]참고. 하이어라키 탭의 [Create] 버튼을 누르면 그림 12의 오른쪽 부메뉴가 곧바로 나타나므로 이것을 이용하는 것이 더 편할 것이다.
[그림 12] 메뉴에 있는 오브젝트를 하나씩 디자인 창에 설치한 후 적당한 위치로 이동하면 [그림 13]과 같이 보일 것이다. 메뉴의 위에서부터 정육면체, 구, 캡슐, 원기둥, 평면이다.
사람이나 동물과 같은 캐릭터는 외부에서 2D 또는 3D로 디자인해서 사용하므로 유니티는 기본적인 오브젝트만 제공한다. 이 오브젝트만 가지고도 간단한 게임 정도는 만들 수 있다. 물론 오브젝트의 표면을 입히기 위한 이미지는 별도로 준비해야 할 것이다.
3. 조명 추가
하이어라키 탭에서 [Create] 버튼을 눌러 조명(Directional Light)을 하나 추가하자[그림 14]. 조명(Directional Light)은 햇빛과 같은 조명으로 방향만 있다. 그림자를 만드는 기능이 있으며, 디자인 탭의 어디에 위치하던지 똑같은 밝기로 비춘다. 게임에서 기본으로 사용하는 조명이다. [그림 14]에 있는 다른 조명들은 조명의 근처만 비추는 것으로 방향과 거리가 있으므로 거리에 따라 빛의 밝기가 달라진다. 조명들을 하나씩 설치해서 이리저리 이동해 보면 그 차이를 금방 알 수 있을 것이다.
조명을 추가하면 디자인 탭이 밝아진다[그림 15]. 조명은 실제의 게임에 반영된다.
오브젝트 움직이기Ⅰ
1. 화면 디자인
공이 허공에서 바닥으로 떨어지는 것을 구현해 보자. 앞에서 설치한 오브젝트의 속성을 [표1]과 같이 설정한다. 오브젝트의 속성은 디자인 탭이나 하이어라키 탭에서 오브젝트를 선택한 후 인스펙터 탭에서 해당 항목을 입력한다[그림 16]. 오브젝트의 이름을 변경할 때에는 하이어라키 탭에서 오브젝트를 선택한 후 F2 키를 누른다.
공이 허공에서 바닥으로 떨어지는 것을 구현해 보자. 앞에서 설치한 오브젝트의 속성을 [표1]과 같이 설정한다. 오브젝트의 속성은 디자인 탭이나 하이어라키 탭에서 오브젝트를 선택한 후 인스펙터 탭에서 해당 항목을 입력한다[그림 16]. 오브젝트의 이름을 변경할 때에는 하이어라키 탭에서 오브젝트를 선택한 후 F2 키를 누른다.
바닥, 공, 카메라의 Rotation은 모두 (0, 0, 0), 스케일(Scale)은 (1, 1, 1)이다. 조명의 로테이션(Rotation)을 변경하면 빛의 방향 및 밝기가 변하므로 게임 탭의 오브젝트가 잘 보이는 값으로 적절히 설정한다. 표1에 표시하지 않은 오브젝트는 적당한 위치로 이동해 둔다. 오브젝트의 속성을 설정하면 게임 탭은 [그림 17]과 같이 보일 것이다. 표1을 보면 알겠지만 유니티에서는 오브젝트의 높이는 포지션(Position)의 y 값으로 지정한다.
2. Rigidbody 컴포넌트 추가
현재 공이 허공에 떠 있지만 아직 공에 물리적인 특성이 없으므로 게임을 실행해도 아무 변화가 없을 것이다. Rigidbody는 오브젝트에 물리적인 특성을 부여하는 컴포넌트(속성의 집합)이다. 하이어라키 탭에서 공을 선택한 후 [Component▶Physics▶Rigidbody] 메뉴를 클릭해서 공에 Rigidbody 컴포넌트를 추가한다[그림 18].
■ Rigidbody의 속성
하이어라키 탭에서 공을 선택하면 인스펙터의 Rigidbody의 속성이 모두 표시된다[그림 19]. 다음은 Rigidbody의 기능이다.
하이어라키 탭에서 공을 선택하면 인스펙터의 Rigidbody의 속성이 모두 표시된다[그림 19]. 다음은 Rigidbody의 기능이다.
Mass - 물체의 질량. 질량이 작을수록 더 빨리, 더 멀리 움직인다(자유낙하는 질량의 영향을 받지 않는다).
Drag - 선형 운동 저항. 바닥이나 공기에 대한 저항도로 이 값이 크면 속도가 떨어진다.
Angular Drag - 회전 운동 저항. 공이 굴러갈 때의 저항력으로 이 값이 0이면 한없이 굴러간다.
Use Gravity - 물체가 중력의 영향을 받는지의 여부. 이 값이 설정되면 발사한 포탄은 일정거리를 이동한 후 추락하지만, 설정하지 않으면 영원히 날아간다
Drag - 선형 운동 저항. 바닥이나 공기에 대한 저항도로 이 값이 크면 속도가 떨어진다.
Angular Drag - 회전 운동 저항. 공이 굴러갈 때의 저항력으로 이 값이 0이면 한없이 굴러간다.
Use Gravity - 물체가 중력의 영향을 받는지의 여부. 이 값이 설정되면 발사한 포탄은 일정거리를 이동한 후 추락하지만, 설정하지 않으면 영원히 날아간다
이제 게임을 실행하면 허공의 공이 바닥으로 떨어지는 것을 볼 수 있다. 그러나 공이 바닥에 충돌한 후 반사하지는 않는다.
3. 오브젝트에 탄성 부여
유니티의 기본적인 설정으로 시작한 프로젝트에는 충돌한 물체의 탄성 계수를 설정하는 기능이 없다. 이 기능을 추가하기 위해 프로젝트 탭에서 마우스 오른쪽 버튼을 클릭하고 [Import Package▶Physic Materials] 메뉴를 선택한다[그림 20].
[그림 21]과 같이 물체에 물리적 반발 등의 특성을 설정하는 애셋을 추가하는 창이 나타난다. 모두 선택한 후 임포트(Import) 버튼을 누른다. 애셋은 컴포넌트와 리소스의 집합이다.
공을 선택한 상태에서 인스펙터의 Sphere Collider 항목을 보면, Material로 표시된 부분의 오른쪽 끝에 있는‘?’모양의 아이콘을 찾을 수 있을 것이다. 이것을 클릭하면 방금 추가한 애셋을 선택하는 창이 나타나므로 여기에서 Bouncy를 선택한다[그림 22].
다시 게임을 실행하면 그림 23과 같이 통통 잘 튀는 공을 볼 수 있다. Bouncy 외에 다른 애셋이 어떤 기능을 하는지 각각의 애셋을 선택한 후 게임을 실행해보기 바란다.
유니티의 기본적인 설정으로 시작한 프로젝트에는 충돌한 물체의 탄성 계수를 설정하는 기능이 없다. 이 기능을 추가하기 위해 프로젝트 탭에서 마우스 오른쪽 버튼을 클릭하고 [Import Package▶Physic Materials] 메뉴를 선택한다[그림 20].
[그림 21]과 같이 물체에 물리적 반발 등의 특성을 설정하는 애셋을 추가하는 창이 나타난다. 모두 선택한 후 임포트(Import) 버튼을 누른다. 애셋은 컴포넌트와 리소스의 집합이다.
공을 선택한 상태에서 인스펙터의 Sphere Collider 항목을 보면, Material로 표시된 부분의 오른쪽 끝에 있는‘?’모양의 아이콘을 찾을 수 있을 것이다. 이것을 클릭하면 방금 추가한 애셋을 선택하는 창이 나타나므로 여기에서 Bouncy를 선택한다[그림 22].
다시 게임을 실행하면 그림 23과 같이 통통 잘 튀는 공을 볼 수 있다. Bouncy 외에 다른 애셋이 어떤 기능을 하는지 각각의 애셋을 선택한 후 게임을 실행해보기 바란다.
■ Rigidbody의 Drag
게임을 실행하면 공이 무한정 반사하여 도무지 끝날 것 같지가 않다. 리지드바디의 저항(Drag) 속성이 0으로 되어 있기 때문에 마찰이 없는 공간에서 운동하는 셈이다. 게임을 중지하고 이 값을 0.5~1 사이로 적절히 변경시켜 가면서 값의 변화에 따라 어느 정도 반발하는지 그 특성을 알아두자.
게임을 실행하면 공이 무한정 반사하여 도무지 끝날 것 같지가 않다. 리지드바디의 저항(Drag) 속성이 0으로 되어 있기 때문에 마찰이 없는 공간에서 운동하는 셈이다. 게임을 중지하고 이 값을 0.5~1 사이로 적절히 변경시켜 가면서 값의 변화에 따라 어느 정도 반발하는지 그 특성을 알아두자.
이상으로 유니티의 특장점과 오브젝트를 공중에서 떨어뜨리고 충돌 후 반사시키는 방법에 대해 알아보았다. 다음 강좌는 오브젝트가 충돌할 때 사운드를 연주하고, 키보드를 이용해서 오브젝트를 이동하는 방법에 대해 알아 볼 것이다.
저작권자 © 디지털포스트(PC사랑) 무단전재 및 재배포 금지