중급
게임
> 개발
> 개발엔진
Unity3D 1 - Unity3D의 구조와 활용
동영상(나레이션): 김현우
유니티(Unity)는 게임 오브젝트와 게임 오브젝트를 구성하는 컴포넌트가 가장 기본적인 유니티(Unity)의 오브젝트 형태들이구요, 이 컴포넌트를 제작하기 위해서는 우리가 스크립트를 사용해서 컴포넌트를 제작하게 되는데요. 이들의 관계에 대해서 한번 살펴보도록 하고요. 그리고 이번에 새로 나온 유니티(Unity)의 업그레이드 형태에 포함이 된 2D제작의 게임엔진의 기능으로서 새롭게 추가된 형태들, 그런 부분에 대해서 한번 살펴보도록 하겠습니다.
(자막)
김현우
경력: G9 이사
네시삼십삼분 이사
CCR RF-Online 개발실 실장
한국 콘텐츠 진흥원 게임아카데미 외래 교수
개발: haderX5“Shader System Integration:
Nebula2 and 3DS Max“
(자막)
유니티(Unity) 3D 1
-Unity 3D의 구조와 활용
질문. 유니티(Unity)의 컴포넌트란 무엇인가요?(1:01)
답변. 유니티(Unity)에서 가장 기본이 되면서 보통 처음 유니티(Unity)를 접하시는 분들이 조금 헷갈리기 쉬운 부분이 컴포넌트의 개념인데요. 컴포넌트란 유니티(Unity)의 관점에서 보면 유니티(Unity)의 화면에서 Hierarchy View 상에 위치하는 게임 오브젝트들을 구성하고 있는 각각의 객체들이 되겠습니다. 이 컴포넌트라는 것은 일반적으로 가장 쉽게 이해를 하시고 싶은 방법 중에 하나는 아이들이 가지고 노는 레고를 생각하시면 되겠는데요. 일단은 방금 말씀드린 유니티 Hierarchy View에 올 수 있는 것들은 반드시 게임 오브젝트 하나만 Hierarchy View에 위치를 할 수가 있는데, 이 Hierarchy View에 위치하는 게임 오브젝트만으로는 우리가 만드려고 하는 게임이 구성이 되지 않습니다. 실제로 게임 오브젝트를 실제로 구체화 시킬 수 있는 무언가가 필요한데, 이 역할을 하는데 유니티(Unity)에서 가장 중요한 개념 중에 하나인 컴포넌트 되겠습니다. 예를 들자면 게임에 위치하는 플레이어 캐릭터를 생각해 보면, 플레이어 캐릭터는 화면에 나타나는 형체만 있을게 아니고 실제로 움직이게 될 때는 사용자 입력을 받는 부분도 필요할 테고요. 그리고 게임 안에서 움직이다가 충돌을 한다던가, 특정한 액션을 취한다던가 할 때 어떤 이벤트가 일어나게 되는데 이런 것들을 다 게임에서 처리를 하려면 플레이어 캐릭터에 맞는 컴포넌트들을 우리가 만들어서 플레이어캐릭터라는 게임 오브젝트에 추가를 해줘야 됩니다. 이 개념으로 우리가 유니티(Unity)의 컴포넌트를 이해를 하고 이 컴포넌트들도 유니티(Untiy)의 게임 오브젝트를 구성을 하게 될 때 우리가 만드려고하는 게임의 형태대로 제작을 할 수 있게 됩니다. 이때 우리가 컴포넌트의 게임을 알고 나면 어느 정도 게임을 만드는데 조금 익숙해 질 것 같은데요. 그런데 이 컴포넌트 같은 경우에는 기존의 프로그램 패러다임과 조금 다른 면이 있기 때문에 실제로 접근하실 때는 약간의 사고의 전환이 필요한부분도 있습니다. 그래서 우리가 제작하고자 하는 게임을 첫 번째로는 객체별로 이것은 게임 오브젝트의 형태가 되겠는데요. 플레이캐릭터라던가, 적 캐릭터라던가, 스테이지라던가, 기타 등등 게임을 구성하는 오브젝트 구성을 한 다음에 이 각각의 게임 오브젝트들이 다시 어떠한 컴포넌트들로 구성을 시키는 것이 좋을까 라는 측면으로 세분화해서 구성을 하게 되면 전체적인 게임의 오브젝트 별로 필요한 컴포넌트를 나눠서 제작을 하시는데 도움이 될 것 같습니다.
질문. 유니티(Unity) 엔진에서 어떤 언어를 사용하는 것이 좋은가요?(3:53)
답변. 유니티(Untiy)를 시작을 보시면 유니티(Unity) 에디터를 무엇으로 가지고 편집해서 나오는 툴이 아니기 때문에요. 반드시 컴포넌트부터 해서 무엇인가 특정한 작업들, 전문적인 작업을 진행 하시려면 반드시 프로그래밍 스크립트를 통한 프로그래밍의 과정이 반드시 필요하게 되는데요. 유니티(Unity)에서는 지원하는 스크립트 언어가 세 가지를 보통 많이 지원하고 있습니다. 유니티(Unity)가 .NET을 지원하는 오픈소스 기반의 Mono를 지원하기 때문에 .NET의 CIL, Common Intermediate Language의 특징을 지원을 하고 있기 때문에 여러 종류의 스크립트 언어를 지원하고 있는데요. 유니티(Unity)에서 지원하는 보통 C#, JavaScript, Boo의 형태 이 세 가지를 지원하고 있습니다. 여기서 보시면 ‘어떤 언어를 선택해야 될까요?’ 이런 질문이 나올 수 있는데요. 보통 보시면 아무래도 처음 랭기쥐를 선택할 때 혹은 처음 랭기쥐를 배우시는 분들 아니면 특이하게 앱 프로그래밍을 하시다가 유니티(Unity)를 선택하시는 분들 같은 경우에는 본인이 익숙하기 때문에 자바 스크립트를 선택을 해서 많이들 작업을 하시는 분들이 많은데요. 또 초창기 유니티(Unity)의 샘플이라던가 예제들 보면 공개되어있는 많은 것들이 자바스크립트 형태로 공개가 되어있고 나와 있어서 그런 것들을 보면서 유니티(Unity)를 학습하신 분들 같은 경우에는 자바 스크립트를 선택을 해서 작업을 하는 경우가 많은데요. 조금 더 나중을 생각해서 전문적인 유니티(Unity) 프로그램이라던가 게임을 제작을 하고 싶다고 하시면 아무래도 자바스크립트나 Boo형태보다는 C# 형태로 시작을 하시는걸 가장 추천하고 싶습니다. C#같은 경우에 방금 말씀드린 대로 조금 전문적인 프로그래밍이 가장 유리한 언어라고 할 수 있고요. 또 유니티(Unity)의 기능을 보시면 유니티(Unity) 에디터 자체를 C#을 통해서 확장해서 커스터마이징해서 사용할 수 있는데요. 이 부분 같은 경우에는 진짜 전문적인 유니티(Unity) 게임을 제작할 때 가장 필수적인, 핵심적인 기능 중에 하나인데 에디터 스크립트 다른 형태의 스크립트 사용을 할 수 없고요. 반드시 C#을 통해서만 커스터마이징을 할 수가 있기 때문에 이런 점에서도 다른 랭귀지보다 C#을 사용하는 것을 추천을 하고 싶습니다. 그리고 유니티(Unity) 같은 경우에 Mono를 기반으로 구동이 된다고 설명을 드렸는데요. Mono 같은 경우에 .NET을 기반을 하고 있기 때문에 C#을 사용하게 되면 유니티(Unity) 이외에 기존의 .NET 기반에 .NET 라이브러리나 코드를 사용할 수 있는 점도 굉장한 장점으로 작용하고 있습니다. 그리고 C#을 사용 했을 때는 기본적인 C#의 프로그래밍 스펙만 인지를 하신다음에 유니티(Unity)를 가지고 프로그래밍을 하셔도 큰 문제가 없지만 조금 더 깊게 공부를 하셔서 유니티(Unity)와 C#을 사용한 Coroutine이라던가, C#의 LINQ, Lambda, Reflection 같은 언어적인 특징에 대해서도 조금 더 깊게 공부를 하시면 유니티(Unity)를 가지고 조금 더 전문적인 활용을 있는데 많은 도움이 될 것 같습니다.
질문. 유니티(Unity) 2D 게임이 가능한가요?(7:32)
답변. 유니티(Unity)를 가지고 선택을 하실 때 많이들 하시는 질문 중에 하나가요. 유니티(Unity) 3D이기 때문에 실제로 ‘3D 게임을 위한 전문적인 툴이 아니냐’ 이렇게 말씀을 하시는 분들이 많은데요. 그리고 유니티(Unity)를 기본적으로 작동을 시켜보면 실제로 보여지는 것들이 다 3차원으로 구성이 되어있기 때문에 ‘이걸 가지고 2D게임을 만든다고 하긴 하지만 2D게임을 만들기에는 조금 무거운 게 아닌가, 아니면 닭 잡는데 소 잡는 칼을 쓰는 경우가 아닌가. 이런 질문들을 하시는 경우가 많은데요. 실제로는 유니티(Unity) 3D를 가지고도 많은 수의 2D 게임들을 제작을 하고 있고요. 그리고 실제로 전문적인 게임들도 많습니다. 첫 번째로 보면 유니티(Unity)가 3D게임을 만들기 위해서 나온 2D이기 때문에 3D를 위한 기능도 있지만 실제로 2D게임 같은 경우에도 오픈지엘을 기반으로 해서 렌더링 하고 있기 때문에 그런 부분에서는 유니티(Unity) 3D로 작업을 하시는 거랑 다른 2D엔진 작업을 하시는 거랑 큰 차이가 없다고 설명을 할 수 있습니다. 그다음에 게임을 만들게 되면 실제로 화면에 그리는 게 굉장히 중요한 작업 중에 한 부분입니다만 화면에 그리는 것만으로는 게임을 완성하는 건 당연히 힘들 구요. 네트워크관리라던가 대규모의 데이터 관리들 아니면 실제로 게임을 제작을 하게 될 때는 제작하는 게임 장르의 적합한 다양한 툴을 개발할 필요가 있는데요. 이러한 것들의 처리를 보면 화면에 그리는 것보다 훨씬 더 많은 처리가 필요한대, 화면에 그리기 위한 렌더링 엔진만 가지고 게임을 제작하게 되면 실제로 네트워크처리라던가 데이터 관리부분, 툴 개발을 모두 처음부터 새로 개발을 해야 될 그런 필요성도 생깁니다. 유니티(Unity) 3D에서 제공을 하고 있는 이런 기능들을 이용해서 게임을 제작을 하게 되면 훨씬 더 편리하고 빠르게 제작을 할 수 있다는 장점도 있습니다. 그리고 또 유니티(Unity) 3D 같은 경우에는 이미 시장에서 굉장히 많은 사용자를 확보하고 있기 때문에 유니티(Unity) 3D와 관련한 그리고 굉장히 다양한 용도의 오픈 소스들 아니면 저렴한 가격에 구매해서 사용을 할 수 있는 그러한 프로젝터라던가 많이 확보가 되어있습니다. 이런 것들을 사용해서 프로젝트를 진행을 하시는 것도 유니티(Unity)를 사용해서 작업할 때의 하나의 큰 장점이라고 생각을 할 수 있겠습니다. 그리고 2D게임을 위한 유저가 굉장히 많다보니깐 최근에 나온 유니티(Unity) 4.3버전부터는 실제로 2D게임 이용에 전문적인 기능이 추가가 되어서 나와 있는데요. 잠깐 살펴보자면 스프라이트 텍스처를 기본적으로 임포트 할 수 기능이라던가 아니면 2D게임 만들 때 기본적으로 가장 중요한 기능 중에 하나인 아틀라싱을 만드는 기능, 그리고 2D에 적합한 씬 제작을 위한 기능들도 추가가 되어있습니다. 그리고 기존의 유니티(Unity) 3D에서는 Physx라는 물리엔진을 기본적으로 내장해서 물리처리를 하고 있었는데요, 아무래도 2D게임전용의 물리엔진보다는 약간 무거운 그런 부분이 있었는데, 4.3부터는 Box2D라고 잘 알려진 2D 게임 전용 물리엔진이 추가가 되어서 스프라이팅 기능뿐만 아니라 물리엔진부분에서도 훨씬 더 2D게임에 제작에 적합한 그런 기능들이 추가가 되었습니다. 그래서 유니티(Unity) 3D를 가지고 3D게임뿐만 아니라 2D게임 제작 했을 때도 다른 게임엔진을 사용하는 것보다 많은 장점을 가지고 있고 또 훨씬 더 실제로 처음부터 다 전체를 만드는 것보다는 훨씬 더 빠르게 작업을 할 수 있다는 게 유니티(Unity) 3D의 큰 장점 중에 하나가 되겠습니다.
Unity3D의 기능들 중 중요한 기능들과 초보자의 입장에서 이해가 쉽지 않은 기능과 기술들을 소개하는 과정입니다.
게임 오브젝트와 컴포넌트부터 스크립트를 이용한 컴포넌트 제작까지. Unity를 어떻게 활용할 수 있으며 어떤 구조로 이뤄져있는지 분석해봅니다.
첫 번째 강의에서는 Unity의 기본 개념에 대해 살펴봅니다.
컴포넌트가 무엇인지, Unity 엔진에서 사용하는 언어, 2D게임 구현 등 Unity에 대해 가지는 기본적인 궁금증들을 해결해드립니다.
[김현우]
- G9 이사
- 네시삼십삼분 이사
- CCR RF-Online 개발실 실장
- 한국 콘텐츠 진흥원 게임아카데미 외래교수
개발 경력으로는 haderX5“Shader System Integration, Nebula2 and 3DS Max“ 등이 있음.
-
연계 과정