안녕하세요 2일과 17일 담당 박성준입니다. ㅎㅎ
오늘은 게임 오브젝트 설계에 대한 이야기를 해보려고 합니다.
어쩌다보니 연재 형태로 한두편 더 쓰게 될 것 같습니다..
시간이 없어서 할일이 많아서 한번에 다 쓰지 못한것이 아닙니다..
회사일이 바빠서 몸이 피곤해서도 아닙니다........
그런데 웬지 눈물이 나네요 ㅠㅠ
어쨌든 허접한 게임 오브젝트 설계 설명을 시작해보겠습니다!
먼저.. 게임 오브젝트가 뭐지?!
게임 오브젝트 설계에 앞서 게임오브젝트가 무엇인지 한번 생각해봅시다!
가장 먼저 떠오르는것은 역시나 플레이어나 몬스터 같은 캐릭터일 것입니다. 그리고 함정이나 맵에 설치되는 여러가지 엑티브오브젝트들도 역시 게임 오브젝트입니다.
캐릭터나 엑티브 오브젝트외에도, 캐릭터가 서있는 지형도 역시 게임 오브젝트이며, 이렇게 눈에 보이는것들이 아닌 퀘스트나 이벤트를 위한 트리거, 광원, 카메라 등 눈에 보이지 않더라도 오브젝트끼리 무언가 연관되는일을 한다면 모두 게임 오브젝트 라고 할 수 있습니다. 오브젝트끼리 서로 상호작용을 하면서 일어나는 일들이 모여서 하나의 게임을 구성하게 됩니다.
즉, 게임은 게임 오브젝트들이 만들어내는 상호작용의 모음 이라고도 할 수 있습니다.
다른 말로 해보면 '어떠한 작용을 일으키거나 받는 모든것들은 게임 오브젝트라고 생각해야 한다' 라고도 볼 수 있습니다.
그래서.. 게임 오브젝트 설계는 어떻게?!
게임 오브젝트를 설계하는 방법은 만드는 사람마다 다르고 어떻게 어떤 게임을 만드느냐에 따라 다르겠지만 가장 많이 사용되는 방법들이 몇 가지 있습니다. 프로그래밍도 사람이 하는거니까요.. MMORPG에서도 스탯과 스킬트리를 다양하게 찍을 수 있도록 해놔도 결국엔 많이 해본 몇몇 유저들이 올려놓은 공략을 따라가게 되는것처럼 프로그래밍도 비슷하지 않겠습니까?!
첫번째로.. 계층 구조를 사용한 오브젝트 설계
그 중에서 첫 번째 방법은 계층구조를 이용하여 게임 오브젝트를 설계하는 방법입니다. 불과 몇 년 전까지만 해도 거의 대부분 이런 방식으로 게임 오브젝트를 만들었었고, 현재도 상당히 많은 프로젝트에서 사용되고 있을것이라고 생각됩니다. 이 방법은 말 그대로 게임 오브젝트가 하는 기능을 중심으로 하나의 계층을 만들어 클래스 설계를 하는 것입니다.
예를 들어 Player, Monster, Prop 오브젝트를 만든다고 가정해봅시다.
아주 간단하게 이렇게 만들 수 있을 것입니다. Player, Monster, Prop의 공통된 부분은 GameObject에서 처리를 하고, 각각 타입에 따라 처리해야 하는 것들은 각각 클래스에서 처리를 합니다. 그런데 Player와 Monster는 움직일 수 있기 때문에 그와 관련된 부분을 하나의 계층을 추가하여 같이 사용할 수 있으면 더 좋을 것 같습니다.
그래서 MovableObject 라는 중간 계층을 하나 더 추가하여 이렇게 만들면 움직임 관련된 처리는 이 MovableObject에서 하게 되면 움직임 관련된 코드가 Player와 Monster에 중복으로 있을 필요가 없어집니다.
이제 여기에 Trigger 오브젝트를 추가한다면 어떻게 될까요? Player, Monster, Prop은 모두 화면에 그려지는 오브젝트이지만 Trigger는 화면에 그려지지 않는 오브젝트입니다. 따라서 GameObject에 화면에 그리는 처리를 넣게 되면 Trigger 입장에서는 불필요한 코드가 들어가게 되는 것입니다.
이 그려지는 부분을 RenderableObject라는 계층을 하나 더 만들어서 사용하게 되면 중복된 코드도 없어지고 더 깔끔하게 해결이 될 것입니다. 이런식으로 공통된 부분들을 묶어서 계층을 추가하여 설계해 나가는 방식이 계층 구조를 사용한 게임 오브젝트 설계 방식입니다.
오늘은 여기까지.. 다음 연재에서는
계층 구조를 사용한 방식의 문제점과 이 문제를 해결하기 위해 나온 컴포넌트 기반 설계 방식에 대해서 등등을 설명을 해보도록 하겠습니다..
반응형
'프로그래밍' 카테고리의 다른 글
사고뭉치를 위한 디버깅 방법 #01 (6) | 2012.02.05 |
---|---|
나... 나도 병렬 프로그래밍 할래!! - #2 (12) | 2012.02.03 |
새로운 기법 != 새 장난감 (20) | 2012.02.01 |
알기 쉬운 HDR과 톤맵핑 #1 (1) | 2012.01.31 |
Vertex Texture Fetch (6) | 2012.01.27 |