게임 속에서 움직이는 모든 요소를 이해하는 첫걸음은 무엇일까요? 바로 게임 오브젝트라는 개념을 아는 것입니다. 캐릭터가 걷고 적이 공격하는 모든 상황을 생각해 보세요. 개발자는 이것을 하나하나의 객체로 바라봅니다. 이 방식은 디자이너가 세상을 보는 눈과도 아주 비슷해요.
디자이너는 게임을 볼 때 대상을 자연스럽게 나눕니다. 이건 캐릭터고 저건 아이템이라고 생각하죠. 이렇게 대상을 나누는 사고방식은 개발에도 그대로 적용됩니다. 처음에는 조금 낯설 수 있지만 익숙해지면 정말 편해요. 이제 이 개념을 조금 더 자세히 들여다보겠습니다.
속성과 행동이라는 두 가지 기둥
게임 오브젝트는 크게 두 가지 요소를 가지고 있어요. 하나는 속성이고 다른 하나는 행동입니다. 속성은 그 오브젝트가 가진 현재 상태를 말해요. 위치나 체력 같은 정보가 여기에 속하죠. 이 정보들은 게임이 진행되는 동안 계속해서 변할 수 있습니다.
행동은 시간이 흐르며 오브젝트가 어떻게 변하는지에 대한 규칙입니다. 캐릭터가 키보드 입력에 맞춰 움직이는 것을 떠올려 보세요. 혹은 아이템이 플레이어와 닿았을 때 사라지는 것도 행동입니다. 오브젝트는 이렇게 매번 자신의 상태를 바꾸며 살아 움직입니다.
설계도와 실제 물건의 차이
여기서 많은 분들이 헷갈려하는 개념이 등장합니다. 바로 타입과 인스턴스의 구분이에요. 타입은 이 오브젝트가 어떤 종류인지 정의하는 설계도와 같습니다. 반면에 인스턴스는 그 설계도로 찍어낸 실제 물건이죠. 팩맨 게임을 예로 들어볼까요?
게임에는 유령이라는 타입이 있습니다. 하지만 화면에는 빨간 유령과 파란 유령 등 여러 마리가 돌아다니죠. 이 개별 유령들이 바로 인스턴스입니다. 이들은 같은 타입에서 나왔기에 기본 행동 방식은 같아요. 하지만 각자 다른 위치에 있고 다른 상태를 가집니다.

같은 타입도 다르게 움직일 수 있어요
타입이 같다고 해서 모든 인스턴스가 똑같이 행동해야 할까요? 그렇지 않습니다. 데이터나 규칙을 조금만 바꾸면 개성 있게 만들 수 있어요. 어떤 적은 플레이어를 보자마자 공격할 수 있습니다. 반대로 어떤 적은 멀리 도망가게 만들 수도 있죠.
이렇게 하면 게임이 훨씬 풍성해집니다. 겉모습은 같은 적이라도 플레이어가 느끼는 긴장감은 달라지니까요. 디자이너는 이런 방식을 통해 세밀한 조정을 할 수 있습니다. 덕분에 플레이어는 지루할 틈 없이 게임을 즐기게 됩니다.
상속으로 효율을 높이는 방법
게임 속 수많은 오브젝트를 일일이 새로 만들려면 정말 힘들 거예요. 그래서 프로그래머는 상속이라는 방법을 사용합니다. 이것은 공통된 특징을 미리 한 번만 정의해 두는 기술이에요. 모든 물체는 위치가 있어야 한다는 규칙을 먼저 만드는 식이죠.
그 위에 캐릭터만 가지는 행동이나 아이템의 특징을 덧붙입니다. 이렇게 하면 같은 내용을 반복해서 적을 필요가 없어져요. 전체적인 설계가 아주 깔끔해집니다. 수정할 때도 공통 부분만 고치면 되니 관리가 정말 편해집니다.
게임 환경에 맞춘 특별한 모델
우리는 이것을 모두 묶어 게임 오브젝트 모델이라고 부릅니다. 일반적인 프로그래밍 객체와는 조금 달라요. 게임이라는 특수한 환경에 맞춰 기능이 더해졌기 때문입니다. 게임은 저장 기능이나 네트워크 통신이 아주 중요하니까요.
게임 엔진은 이런 요구를 만족시키기 위해 여러 기능을 추가합니다. 에디터에서 쉽게 수정하는 기능도 그중 하나죠. 언어 자체에는 없는 기능들을 덧붙여 게임 개발을 돕습니다. 그래서 우리는 더 편하게 게임 세상을 만들 수 있는 것입니다.
보는 모습과 실제 작동의 차이
마지막으로 꼭 알아야 할 점이 있어요. 툴 사이드 모델과 런타임 모델의 차이입니다. 툴 사이드는 디자이너가 에디터 화면에서 보는 모습이에요. 직관적이고 수정하기 편하게 생겼죠. 하지만 게임이 실행될 때는 이야기가 달라집니다.
실제 게임이 돌아가는 런타임 환경에서는 성능이 최우선입니다. 그래서 에디터에서 하나로 보이던 것이 내부에서는 쪼개지기도 해요. 메모리를 아끼고 속도를 높이기 위해서입니다. 이 두 가지 모습이 다르다는 것을 이해하면 좋습니다.
디자이너와 프로그래머의 소통
이 지점에서 디자이너와 프로그래머가 서로를 이해해야 해요. 디자이너가 쓰는 툴은 사용하기 쉬워야 합니다. 하지만 그 결과물이 실행될 때 어떤 비용이 드는지도 알면 좋아요. 오브젝트 하나를 추가할 때 성능에 미치는 영향을 생각해 보는 거죠.
이런 감각이 생기면 디자인 결정이 훨씬 현실적으로 변합니다. 게임 오브젝트는 단순한 기술 용어가 아니에요. 우리가 함께 게임 세상을 만들고 조율하는 소중한 언어입니다. 이 개념을 통해 더 멋진 게임을 기획해 보시길 바라요.