개요
유니티는 게임 개발에 강력한 툴로써, 1인칭 슈팅부터 퍼즐까지 여러 게임 장르에 적합합니다.
유니티의 고도 매핑 지형(Height-mapped terrain), 자체 네트워크 지원(Native networking support) 완벽한 물리 시스템과 스크립팅(Physics integration and scripting)등을 포함, 수많은 기능들을 가지고 있으며 이로 인해 초심자들은 약간 접근하기 어려울 수도 있습니다. 그러나, 유니티의 많은 툴들을 마스터하는것은 무한한 가치가있는 일입니다.
이 튜토리얼은 3인칭 시점의 완전한 3D 플랫폼 게임 레벨을 만드는 과정속으로 안내할 것입니다. 이는 플레이어 제어(Player Control), 충돌 탐지(Collision detection), 약간의 고급 스크립팅, 얼룩 그림자, 기본 AI, 헤드 업 디스플레이(HUD), 컷씬(Cut Scenes), 그리고 음향 효과 추가등 이 모든것을 포함합니다.
당신이 배우게 될 내용
이 튜토리얼은 유니티를 이용한 게임 개발의 기술적인 측면에 중점을 두고 아래의 내용을 다룹니다:
• 캐릭터 컨트롤러(Character Controllers)
• 프로젝터(Projectors)
• 오디오 리스너(Audio Listeners), 오디오 소스(Audio Sources) 그리고 오디오 클립(Audio Clips)
• 다수의 카메라(Multiple Cameras, 그리고 카메라들 간의 전환방법)
• 유니티GUI 스크립팅 시스템
• 컬라이더(Colliders: 충돌가속기)
• 메시지와 이벤트(Messages & Events)
• 조명(Lighting)
• 파티클 시스템(Particle Systems)Particle systems
• 원형 그림자(Blob shadows)
• 스크립팅(AI, 상태머신(State Machine), 플레이어 컨트롤(Player controls))
본 튜토리얼에서는 이 많은 기능들이 어떻게 서로 협력하여 게임을 만들어내는지를 보여줄 것입니다.
당신이 이미 알고 있어야 할 내용
본 튜토리얼은 스크립트를 광범위하게 사용하기 때문에 최소한 유니티에서 지원하는 스크립트 언어(Javascript, C# 또는 Boo) 중 하나라도 사용에 익숙하셔야합니다. (본 튜토리얼에서는 Javascript를 사용하였습니다.)
또한 본 튜토리얼은 사용자가 유니티의 인터페이스에 적응이 되있으며, 유니티의 기본적인 기능인 씬(Scene)에 에셋(Asset) 배치하기, 게임객체(GameObject)에 구성요소(Component) 추가하기, 그리고 인스펙터(Inspector) 속성 수정하기등을 수행하는 방법을 안다는 전제 하에 제작되었습니다.
프로젝트 구성
유니티는 사용자의 프로젝트 에셋을 구성하는 특정 방법을 강요하지 않습니다만, 당신의 에셋을 에셋 종류에따라 "Textures(텍스쳐)", "Models(모델)", "Sound effects(음향 효과)"등의 폴더에 정리/구성하는 것이 가능합니다. 유니티에서는 이러한 방법이 소규모 프로젝트에 적합하다는 것을 알아냈습니다. 좀더 복잡한 프로젝트에는 본사의 사용자들은 주로 자산의 기능에따라 "Player(플레이어)","Enemies(적들)", "Props(소품)", "Scenery(배경)"등의 폴더로 정리하는 것을 추천하였습니다.
본 튜토리얼의 프로젝트는 여러 팀원들이 참여하였으며, 그들의 관습과 스타일등을 반영하기위해 조직적으로 만들어졌습니다. 프로젝트의 신빙성을 위해, 우리는 프로젝트의 구성을 있는 그대로 나두어 이 프로젝트가 "소규모" 프로젝트의 구성과 구조를 묘사할수 있도록 하였습니다.
추상적 게임 객체와 구성요소(Abstract GameObjects & Components)
유니티의 디자인은 각 무대의 자산을 개발 과정의 중심에 배치하며, 대부분의 게임 개발을 드래그 앤 드롭(dragging and dropping) 작업으로 매우 시각적으로 접근할 수 있도록 하였습니다. 이는 대부분의 레벨 디자인 작업에 이상적이지만, 모든 자산들이 이러한 방식으로 표시되지는 않습니다. 몇몇의 에셋들은 시각적 객체라기보다는 좀더 추상적이여서, (오디오 소스 또는 조명같은) 추상적 아이콘(Abstract icon)과 와이어프레임 기즈모(Wireframe Gizmo)를 통해 묘사되어 지거나 무대 뷰(Scene View)에 표시되지 않습니다.스크립트가 후자에 속하는 자산들이라고 할 수 있습니다.
스크립트는 유니티 무대(Unity Scene)에서의 자산과 게임 객체(GameObjects)가 어떻게 상호작용을 하는지 정의하며 이러한 상호작용성은 모든 게임의 핵심입니다. 때문에 많은 정보를 공유할 수 있는 주석등을 스크립트에 포함하는것은 주로 좋은 계획이라고 할수 있습니다.
본 튜토리얼은 사용자가 유니티에서 제공하는 스크립트를 읽고 스크립트 내 곳곳이 적혀있는 많은 주석들을 이해할 수 있다고 전제하고 있습니다. 그러나 특정 중요한 스크립트 테크닉 또는 컨셉은 본 튜토리얼에서 좀더 자세히 다룰 것 입니다.
스크립트들은 주석을 광범위하게 사용하여 작성되었으며, 또한 각각의 디자인에 최대한 따로 설명이 필요없도록 작성되었습니다. 우리는 당신이 이 튜토리얼에서 소개하는 스크립트들을 읽어보고, 공부하기를 바랍니다. 스크립트에 관한 실험은 마음 놓고 해도 좋습니다!
파일
이 프로젝트의 가장 최신파일은 아래의 주소에서 다운로드 받으실 수 있습니다:
http://download.unity3d.com/support/resources/files/3DPlatformTutorialStart.zip
"Scenes"폴더엔 마지막 완성본이 들어있습니다: 메인 메뉴 무대, 게임 오버 무대 그리고 완성된 게임레벨이 포함된 무대가 바로 그것들입니다.
본 튜토리얼은 사용자가 이미 객체를 무대에 배치하는 것과 같은 기본적인 유니티 사용법을 알고 있다고 전제하고 있기때문에, 첫 시작되는 시점에서는 무대엔 이미 기본 배경과 소품이 각각 제자리에 배치 되어 있습니다.
인쇄상의 관습
본 튜토리얼은 매우 길며 많은 정보를 포함하고 있습니다. 이해를 돕기위해 간단한 관습들(conventions)이 사용되었습니다.
-----------------------------------------------
배경과 여담(Background & Tangents)
이런 모양을 가진 상자안의 내용들은 주요 내용을 명료하게 이해하는데에 도움이 될만한
추가적인 정보를 가지고 있습니다.
-----------------------------------------------
본 튜토리얼에서의 스크립트 코드들은 아래와 같이 작성되어 있습니다:
-----------------------------------------------
// 아래는 간단한 스크립트 코드 입니다.
Function Update()
{
DoSomething();
}
-----------------------------------------------
☆참고
본 튜토리얼의 스크립트들은 수많은 주석을 포함하고 있으며 쉽게 이해할 수 있도록 제작되었습니다. 본 튜토리얼에는 공간을 절약하기 위해 이러한 주석들이 빠져있음을 알려드립니다.
본 튜토리얼에서는 유니티에서 사용자가 해야 하는 행동들을 이런 방식으로 알려줍니다:
ㅁ 이것을 누르고;
ㅁ 그담엔 요것도 누르고;
ㅁ 그담엔 플레이 버튼을 누르십시오.
스크립트의 이름, 에셋, 메뉴 아이템 또는 인스펙터(Inspector) 속성(Properties)은 굵은 글씨로 처리됩니다.
반면에 고정폭 폰트는 위 스크립트의 Update()함수와 같은 스크립트의 함수와 이벤트 이름에 사용됩니다.
유니티의 관습
유니티는 유일무이한 개발 시스템입니다. 대부분의 개발자들은 코드 편집기를 이용, 그들이 일하는 90%의 시간을 코드를 편집하는데에 시간을 보내며 에셋을 불러오 거나 사용하는데에 조차 코드를 작성하는것에 익숙해져 있을 것입니다. 유니티는 다릅니다: 유니티는 코드 중심이기 보단 에셋중심의 프로그램으로서, 일반 3D 모델 링 어플리케이션과 같이 자산에 중점을 두고 있습니다. 때문에, 유니티 개발에 있어 고유의 핵심 관습과 용어들을 이해하는 것은 매우 값진 일입니다:
프로젝트
유니티를 이용해 개발된 게임은 프로젝트로 구성되어질 것입니다. 이는 사용자가 다루는 프로젝트의 모델,
스크립트, 레벨, 메뉴 등의 모든 요소를 포함하고 있습니다 . 주로 하나의 프로젝트 파일은 사용자의 게임에
필요한 모든 요소를 포함하게 될 것 입니다. 처음 유니티2를 시작하게 되면 처음 해야하는 일은 프로젝트 파
일을 여는 일입니다. (만약 프로그램을 막 설치한 후라면 열려는 프로젝트 파일은 아일랜드 데모(Island
Demo)를 포함하고 있을 것입니다)
씬(Scenes)
각 프로젝트는 무대라고 불리우는 하나 또는 더 많은 문서를 포함하고 있습니다. 하나의 무대는 하나의 게임
레벨을 포함하고 있을 것이나, 게임 메뉴, 게임오버 시퀸스, 또는 주요 컷신과 같은 주요 유저 인터페이스
요소들도 포함되어 있을 수 있습니다. 좀더 복합적인 게임들은 한 무대 전체를 초기화하는데에만 사용되기도
합니다. 그러므로 게임의 모든 레벨은 무대와 같은 구성을 하게 될것이나, 모든 무대가 꼭 게임 레벨일 필요는
없습니다.
게임객체(GameObjects), 구성요소(Components), 에셋(Assets) & 프리팹(Prefabs)
유니티를 이해하는데 있어 주요 핵심은 게임객체와 구성요소간의 관계를 이해하는대에 있습니다.
게임객체
게임객체는 유니티에서 핵심적인 개발 요소입니다. 게임객체는 구성요소라 불리우는 각자 다른 기능의 조각들을 한데 모으는 그릇입니다. 게임객체는 거의 언제나 하 나 이상의 구성요소를 포함하고 있습니다. 모든 게임객체는 객체의 위치와 방향을 정의하는 변형 구성요소(Transform Component)을 가지고 있습니다.
게임객체 계층(Hierachies)
게임객체의 진정한 힘은 OS X의 파인더(Finder)에서의 폴더처럼 다른 게임객체를 객체안에 포함할 수 있는 능력입니다. 이는 게임객체의 체계적인 구성을 가능케하 여 복합 모델 또는 완전한 조명 장치가 하나의 상위(parent) 게임객체 아래서 정의될수 있도록 해줍니다. (사실 대부분의 모델들은 유니티에서 게임객체의 상위층으로 표시되며 이는 모델들이 모델링 패키지에서 어떻게 정의되어있는가를 보여주기 때문) 다른 게임객체내에 정의된 게임객체는 하위(child) 게임객체라 불립니다.
구성요소(Components)
구성요소는 게임객체를 구성하는 요소입니다. 구성요소 없이 게임객체는 아무 흥미로운 일도 하지 않을것입니다.
구성요소는 메쉬(Mesh), 물체, 지형 데이터(Terrain Data), 또는 파티클 시스템 같은 가시적인 독립체들을 묘사할수 있습니다. 다른 구성요소의 유형들은 좀더 카메 라와 조명과 같이 묘사하는데 물리적인 모델이 필요없는 추상적인 유형이기 때문에 물리적인 모델 대신 아이콘이나 약간의 와이어프레임 지표를 통해 핵심 설정을 보여줍니다.
구성요소는 '언제나' 게임객체에 첨부되어 있으며, 단독으로 활동할 수 없습니다. 여러개의 구성요소가 같은 게임객체에 첨부될 수 있습니다. 게임객체는 특정 종류의 여러 구성요소를 지원할 수 있습니다. (예를 들자면 게임객체는 여러 개의 스크립트를 포함할 수 있습니다.) 그렇지만 파티클 시스템을 정의하는데 사용된 게임객체 같은 경우는 독점적이며 한 게임객체에 한번만 등장할 수 있습니다. 예를들어, 여러개의 파티클 시스템을 정의하고 싶은 경우에는 사용자는 주로 각자 스스로의 파티 클 시스템 구성요소를 포함하는 게임객체의 체계를 사용할것입니다.
에셋(Assets)
임포트된 모든 에셋들을 프로젝트 창(Project Pane)에 표시되며 이 자산들은 거의 아무것이나 될 수 있습니다: 간단한 물체나 텍스쳐, 오디오 파일, 아니면 심지어 완 전한, 미리 만들어진 게임객체 일 수도 있습니다. (이를 바로 "프리팹(Prefab)"이라 불립니다)
예를 들어, 플레이어 캐릭터 프리팹은 모델과 그와 관련된 애니메이션을 포함한 하나의 에셋으로 정의될 수 있습니다. 이는 또한 스크립트 구성요소, 오디오 클립, 그리고 기능하는 다른 구성요소를 포함하여 사용자가 간단히 씬으로 드래그하는것으로 즉시 완벽히 사용할 준비가 갖춰진 아바타를 갖출수 있게됩니다.
커스텀 아이콘과 기즈모
사용자는 원한다면 유니티로 하여금 사용자의 자산을 위한 커스텀 아이콘과 다른 시각적 정보를 표시하도록 할 수 있습니다. 우리는 이 사례에 대해 다음 챕터에서 알아보겠습니다. 사용자의 프로젝트속 자산들은 프로젝트 창에 표시됩니다. 무대위에 자산을 드래그 앤 드롭하면, 씬의 내용물을 정의하는 계층 창(Hierarchy Pane)에 표시됩니다. (유니티의 무대는 극장의 무대와 같습니다.
씬은 레벨, 메뉴, 멀티플레이어 게임 로비 등 사용자가 원하는 어떤것이든 될 수 있습니다.) 프로젝트 창은 프로젝의 모 든창에 걸쳐 그대로 유지됩니다.
프리팹(Prefabs)
프리팹은 템플릿처럼 정의된 에셋이라고 할 수 있습니다. 유니티에서의 프리팹은 워드 프로세서에서의 템플릿 문서와 같은 것입니다. 무대에 조립품을 올려놓으면, 유니티에서는 프리팹의 복사본이 아닌 계층 창으로의 링크를 프리팹에 걸어놓습니다. 이를 인스턴스 생성(Instantiation)이라 부릅니다. 사용자가 만드는이러한 모든 링크는 프리팹의 인스턴스(Instance)라고 부릅니다.
사용자가 프로젝트 창의 프리팹을 클릭하고 설정을 조작함에 따라 무대의 모든 인스턴스에서 그 변화가 즉시 적용되는것을 볼 수 있습니다. 이는 프리팹이 총알, 적과 같은 많은 재사용 요소에 이상적이라는 것을 보여줍니다. 만약 사용자가 게임 내 적이 제대로 작동하지 않는다면, 씬 위의 올려진 적을 하나하나 수정하는 대신 간단히 원본 프리팹의 스크립트 또는 설정만 바꿔주면 됩니다.
그러나 만약 사용자가 프리팹에서 비롯된 특정 인스턴스의 여러가지의 설정을 바꿔야 할 경우엔, 그리하여도 좋습니다: 이 변경내용은 그 특정 인스턴스에만 영향을 끼칠 것입니다.
프리팹들은 프로젝트와 계층 창에서 파란 글씨로 표시됩니다.
☆참고
프리팹 인스턴스는 추가적 구성요소를 가질수 업습니다. 이는 새로운 구성요소의 추가는 기존 원본 프리팹과의 링크를 깨버리기 때문입니다. 유니티는 사 용자가 이와 같은 행동을 할때에 경고 메시지를 표시할 것입니다. 하지만 유니티는 이렇게 링크가 깨진 후 생기는 변경내용에 대해 사용자가 원본 프리팹을 업데이트 할 수 있도록 허용할 것입니다.
감사의 말(Acknowledgements)
본 튜토리얼은 아래의 사람들의 도움없이는 제작이 불가능 하였습니다:
데이비드 헬가슨(David Helgason), 요아킴 안테(Joachim Ante), 톰 히긴스(Tome Higgins), 샘 캘맨(Sam Kalman), 켈리 흘로드베르손(Keli Hlodversson) , 니콜라스 프란시스(Nicholas Francis), 아라스 프란체비시우스(Aras Pranckevicius), 포레스트 존슨(Forest Johnson), 그리고 물론 이 튜토리얼에 사용된 훌륭한 자산 들을 만들어 준 이튼 보스버그(Eathan Vosburgh)에게도 감사의 말을 전합니다.
본 튜토리얼 번역서는 (주)지피엠스튜디오가 운영하는 "유니티코리아" 회원님들을 위한 메뉴얼 번역 자료 입니다.
본 자료를 다른 곳에 개제 하실 때에는 아래의 번역과 출처를 명확히 밝혀 주시기 바랍니다.
본 자료는 제3자가 상업적인 용도로 사용 할 수 없음을 밝힙니다.
번역 : 유니티코리아 [U3K]게임인생
출처 : 유니티코리아(www.unity3dkorea.com)
'Game Engine > Unity' 카테고리의 다른 글
No.3 Unity 3D Platform Tutorial "First Steps #2" (0) | 2010.08.09 |
---|---|
No.2 Unity 3D Platform Tutorial "First Steps" (0) | 2010.08.09 |
[Unity Manual - Building Scenes] Lights(라이트 / 조명) (0) | 2010.08.09 |
[Unity Manual - Building Scenes] Component(구성요소) 사용하기 (0) | 2010.08.09 |
[Unity Manual - Building Scenes] Prefab (프리팹) (0) | 2010.08.09 |