누군가가 (초심자 입장에서) 유니티 같은 게임 엔진에서는 미소녀 가챠, 카드 수집, 텍스트 기반의 노벨 게임 등을 개발하는 것이 화려한 "액션 게임"을 개발하는 것보다 더 어렵게 느껴지는 이유를 물어보았다.
이 글은 그것에 대한 답이다.
결론적으로는, 액션 게임에서는 어떤 대상에 관한 그래픽을 그리고 있는 게임 오브젝트가 실제로 그 대상 그 자체다. 하지만 가챠 게임에서는 오브젝트를 그리는 부분과 오브젝트의 실체가 존재하는 곳이 다르다.
당연하게도, 묘사하려는 대상이 이곳 저곳에 여러 게임 오브젝트에 '나뉘어' 구현되어 있으면 구조가 혼란스러워진다.
유니티로 액션 게임을 만드는게 카드 게임이나 텍스트 기반 게임을 만드는 것 보다 상대적으로 쉬워 보이는 것은 하나의 게임 오브젝트가 하나의 사물을 100% 온전히 나타내기 쉬울수록 게임오브젝트-컴포넌트에 알맞은 구조기 때문이다. 즉, 완결된 엔티티 구조를 가지고 '보이는 것이 곧 존재하는 것인' 게임은 초보자가 만들기 쉽다.
예를 들어, 3D 액션 게임에서 Player 게임 오브젝트는 게임 상에 보이는 플레이어 그 자체의 그래픽과 애니메이션 뿐만 아니라 플레이어에 관한 전투 데이터나 입력 감지 기능 등도 모두 가지고있도록 만든다.
Player 게임 오브젝트는 플레이어와 관련된 모든 컴포넌트를 전부 가지게 되고, 플레이어 관한 모든 기능은 Player 게임 오브젝트 내부에서 '완결'된다.
그런데 트레이딩 카드 게임이나 가챠 게임 같은걸 만든다고 생각하면, '실체가 그려지는 곳'과 '실체(의 데이터)가 존재하는 곳'이 분리된다(데이터와 액터를 분리해서 생각하는 패턴과는 다른 이야기다. 액션 게임에서 총과 총 데이터를 나누어도, 어쨌든 두 오브젝트 모두 Gun 게임 오브젝트에 조립된다).
그런데 가챠 게임의 미소녀 캐릭터를 표시하는 카드 게임 오브젝트에는 플레이어가 소유중인 미소녀 캐릭터의 실체가 없다.
소유중인 카드에 대한 데이터는 별개의 홀더나 인벤토리 안에 존재하고, 그 홀더로 부터, 몇개의 데이터만 뽑아서 카드로 그려낸다. 실제로 캐릭터의 카드 그래픽을 그리는 오브젝트가 캐릭터 그 자체가 아니고, 여러 중간 관리자나 인벤토리 오브젝트를 복잡하게 거쳐오게 되므로 초보자 입장에서는 꽤나 혼란스럽게 되는 부분이다.
정리하면,
액션 게임 - 몬스터가 하나면 몬스터 게임 오브젝트도 하나임. 몬스터 게임 오브젝트에 몬스터로서의 모든 기능이 다 들어가있다.
가챠 게임 - 수집한 미소녀 캐릭터에 관한 데이터가 인벤토리에 따로 있고, 그것을 꺼내서 그리는 부분이 따로 있음. 즉 보이는 것과 실체가 존재하는 곳이 다르다.