프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
jobGuid 꽃미남 프로그래머 "Pope Kim"님의 이론이나 수학에 치우치지 않고 실무에 곧바로 쓸 수 있는 실용적인 셰이더 프로그래밍 입문서 #겁나친절 jobGuid "1판의내용"에 "새로바뀐북미게임업계분위기"와 "비자관련정보", "1판을 기반으로 북미취업에 성공하신 분들의 생생한 경험담"을 담았습니다.
Posted by 끼로

안녕하세요 2일과 17일 담당 박성준입니다. ㅎㅎ
오늘은 게임 오브젝트 설계에 대한 이야기를 해보려고 합니다.
어쩌다보니 연재 형태로 한두편 더 쓰게 될 것 같습니다..


시간이 없어서  할일이 많아서 한번에 다 쓰지 못한것이 아닙니다..
 

회사일이 바빠서 몸이 피곤해서도 아닙니다........
그런데 웬지 눈물이 나네요 ㅠㅠ

어쨌든 허접한 게임 오브젝트 설계 설명을 시작해보겠습니다!



먼저.. 게임 오브젝트가 뭐지?!
게임 오브젝트 설계에 앞서 게임오브젝트가 무엇인지 한번 생각해봅시다!
가장 먼저 떠오르는것은 역시나 
플레이어나 몬스터 같은 캐릭터일 것입니다. 그리고 함정이나 맵에 설치되는 여러가지 엑티브오브젝트들도 역시 게임 오브젝트입니다.


캐릭터나 엑티브 오브젝트외에도, 캐릭터가 서있는 지형도 역시 게임 오브젝트이며, 이렇게 눈에 보이는것들이 아닌 퀘스트나 이벤트를 위한 트리거, 광원, 카메라 등 눈에 보이지 않더라도 오브젝트끼리 무언가 연관되는일을 한다면 모두 게임 오브젝트 라고 할 수 있습니다. 오브젝트끼리 서로 상호작용을 하면서 일어나는 일들이 모여서 하나의 게임을 구성하게 됩니다.


즉, 게임은 게임 오브젝트들이 만들어내는 상호작용의 모음 이라고도 할 수 있습니다. (라고 저는 생각합니다.)
다른 말로 해보면 '어떠한 작용을 일으키거나 받는 모든것들은 게임 오브젝트라고 생각해야 한다' 라고도 볼 수 있습니다. (반드시 그래야 하는건 아니지만.. 전 그렇게 생각합니다..)


그래서.. 게임 오브젝트 설계는 어떻게?!
게임 오브젝트를 설계하는 방법은 만드는 사람마다 다르고 어떻게 어떤 게임을 만드느냐에 따라 다르겠지만 가장 많이 사용되는 방법들이 몇 가지 있습니다. 프로그래밍도 사람이 하는거니까요.. MMORPG에서도 스탯과 스킬트리를 다양하게 찍을 수 있도록 해놔도 결국엔 많이 해본 몇몇 유저들이 올려놓은 공략을 따라가게 되는것처럼 프로그래밍도 비슷하지 않겠습니까?!

첫번째로.. 계층 구조를 사용한 오브젝트 설계 


그 중에서 첫 번째 방법은 계층구조를 이용하여 게임 오브젝트를 설계하는 방법입니다. 불과 몇 년 전까지만 해도 거의 대부분 이런 방식으로 게임 오브젝트를 만들었었고, 현재도 상당히 많은 프로젝트에서 사용되고 있을것이라고 생각됩니다. 이 방법은 말 그대로 게임 오브젝트가 하는 기능을 중심으로 하나의 계층을 만들어 클래스 설계를 하는 것입니다.

예를 들어 Player, Monster, Prop 오브젝트를 만든다고 가정해봅시다.


아주 간단하게 이렇게 만들 수 있을 것입니다. Player, Monster, Prop의 공통된 부분은 GameObject에서 처리를 하고, 각각 타입에 따라 처리해야 하는 것들은 각각 클래스에서 처리를 합니다. 그런데 Player와 Monster는 움직일 수 있기 때문에 그와 관련된 부분을 하나의 계층을 추가하여 같이 사용할 수 있으면 더 좋을 것 같습니다.


그래서 MovableObject 라는 중간 계층을 하나 더 추가하여 이렇게 만들면 움직임 관련된 처리는 이  MovableObject에서 하게 되면 움직임 관련된 코드가 Player와 Monster에 중복으로 있을 필요가 없어집니다.


이제 여기에 Trigger 오브젝트를 추가한다면 어떻게 될까요? Player, Monster, Prop은 모두 화면에 그려지는 오브젝트이지만 Trigger는 화면에 그려지지 않는 오브젝트입니다. 따라서 GameObject에 화면에 그리는 처리를 넣게 되면 Trigger 입장에서는 불필요한 코드가 들어가게 되는 것입니다.


이 그려지는 부분을 RenderableObject라는 계층을 하나 더 만들어서 사용하게 되면 중복된 코드도 없어지고 더 깔끔하게 해결이 될 것입니다. 이런식으로 공통된 부분들을 묶어서 계층을 추가하여 설계해 나가는 방식이 계층 구조를 사용한 게임 오브젝트 설계 방식입니다.


오늘은 여기까지.. 다음 연재에서는 
계층 구조를 사용한 방식의 문제점과 이 문제를 해결하기 위해 나온 컴포넌트 기반 설계 방식에 대해서 등등을 설명을 해보도록 하겠습니다.. (등등은 시간 관계에 따라서 달라질 수 있...)
 


댓글을 달아 주세요

  1. Favicon of https://gamedevforever.com cagetu 2012.01.05 00:26 신고  댓글주소  수정/삭제  댓글쓰기

    재밌는 주제라 기대해 보아요. ㅎㅎ.

  2. Favicon of https://gamedevforever.com Rhea Strike 2012.01.05 07:02 신고  댓글주소  수정/삭제  댓글쓰기

    들었던 기억이 납니다.
    Sims나 야구게임에 쓰였던 환경...머머 인공지능 그거랑 연관된 내용이 아닐까 기대해봅니다. ^^

    • Favicon of https://gamedevforever.com 끼로 2012.01.05 12:08 신고  댓글주소  수정/삭제

      심즈나 야구게임에 쓰였던 환경 머머 인공지능이 뭔가요.. 기대하시면 안되는데.. 좋은걸 설명하는게 아니에요 그냥 단지 제맘대로 만든거 설명일뿐인데...

  3. Favicon of https://gamedevforever.com 스톰(서광록) 2012.01.05 09:40 신고  댓글주소  수정/삭제  댓글쓰기

    오오 기대됩니다! 제 포스팅의 업그레이드 버전 같아요!

  4. Favicon of https://gamedevforever.com 친절한티스 2012.01.05 10:02 신고  댓글주소  수정/삭제  댓글쓰기

    저도 관심 있는 주제라 기대됩니다.

  5. Favicon of https://gamedevforever.com 끼로 2012.01.05 12:02 신고  댓글주소  수정/삭제  댓글쓰기

    헐.. 기대하시면 안되는데..

  6. Favicon of https://gamedevforever.com Silverchime 2012.01.06 14:01 신고  댓글주소  수정/삭제  댓글쓰기

    기대기대 ^^ 와 으헉 크롬에서 댓글이 두개가 달려버리네요

  7. Favicon of https://gamedevforever.com ozlael 2012.01.06 23:04 신고  댓글주소  수정/삭제  댓글쓰기

    우와 기대됩니더

  8. Favicon of https://gamedevforever.com 김포프 2012.01.09 08:31 신고  댓글주소  수정/삭제  댓글쓰기

    끼로님 KGC 강연보고 제가 드렸던 커멘트를 다시 한번 할까요 -_-? 룰루~

  9. Favicon of https://gamedevforever.com denoil 2012.01.13 17:27 신고  댓글주소  수정/삭제  댓글쓰기

    빨리 더 올려주세요~현기증 난단말이예요~

  10. 해피버드 2012.02.02 10:44  댓글주소  수정/삭제  댓글쓰기

    벌써부터 다음이 완전 기대가 되는군요~

  11. Favicon of http://wasdead.blogspot.com isdead 2012.02.02 10:57  댓글주소  수정/삭제  댓글쓰기

    우왕... 요즘 개발 공부하느라 굉장히 궁금해 하던 내용인데 감사합니다!

  12. topkeon 2012.02.02 13:49  댓글주소  수정/삭제  댓글쓰기

    앗! 에다다!!!!!!

  13. 울레리오 2012.02.03 11:37  댓글주소  수정/삭제  댓글쓰기

    KGC때 발표한걸로 때울라고 하는거 아님???ㅎㅎ
    추억의 게임 스샷도보이네..ㅋ

  14. 아도겐 2013.07.08 11:46  댓글주소  수정/삭제  댓글쓰기

    우와... 정말 친절한 설명입니다.