GearsOfWar 에서 중요한 요소 중 하나는 엄폐이다. GoW 액션의 특징은 근접액션인데 이를 위해 게임 내 엄폐물을 두어 서로간의 근접 전투를 유도한다. (엑박 컨트롤러에 의한 영향도 있긴 하지만 논외로 한다.)
여기선 GoW 시리즈에서 프로그래밍 관점에서 엄폐물을 어떻게 다루는지에 대해 살펴본다.
먼저 살펴보아야 할 것은 UE3 엄폐물 객체인 Cover (이하 커버) 이다. 그리고 레벨상에 이런식으로 설치된다.
커버에 대한 내용은 굉장히 많지만 중요한 것만 추리면 아래와 같다.
class CoverLink Extends NavigationPoint native DependsOn( Pylon ) placeable config( Game ); ... // 커버에서 행할 수 있는 액션 enum ECoverAction { CA_Default, // 아무 액션 없음 CA_BlindLeft, // 왼쪽 방향으로 무기만 내민 채 공격하는 행동 (소극적 공격) CA_BlindRight, // 오른쪽 방향. 이하 상동 CA_LeanLeft, // 왼쪽 방향으로 몸 전체를 내민 채 공격하는 행동 (적극적 공격) CA_LeanRight, // 오른쪽 방향. 이하 상동 CA_PopUp, // 커버 위로 몸 전체를 일으켜 세워 공격하는 행동 (적극적 공격) CA_BlindUp, // 커버 위로 무기만 내민 채 난사하는 행동 (소극적 공격) CA_SwatTurn, // 현재 커버에서 반대쪽 커버로 재빠르게 이동하는 행동 // AI 전용 행동 CA_PeekLeft, // 커버 왼쪽으로 고개를 내미는 행동 CA_PeekRight, // 커버 오른쪽. 이하 상동 CA_PeekUp, // 커버 윗쪽. 이하 상동 }; enum ECoverType { CT_None, // 커버가 아님 CT_Standing, // 풀 스탠딩 커버. 캐릭터가 서서 충분히 숨을 수 있는 높이의 커버 CT_MidLevel, // 캐릭터가 몸을 웅크려야만 숨을 수 있는 크기의 커버 }; // CoverLink 는 다수의 CoverSlot 을 가질 수 있다. struct immutablewhencooked native CoverSlot { var Pawn SlotOwner; // 이 슬롯을 선점한 주인 ... var array<ECoverAction> Actions; // 이 커버에서 수행 가능한 액션들 }; ...
보면 알겠지만 커버에는 종류가 있으며 (스탠딩,미드레벨) 여기서 행할 수 있는 행동도 제한되어 있다.
CoverLink 는 1개 이상의 CoverSlot 을 가질 수 있으며 실제 캐릭터가 숨을 수 있는 영역은 CoverSlot (혹은 CoverSlot 과 CoverSlot 사이) 이다.
CoverLink 는 관리상 편의를 위한 레이어 (클래스) 이며, 실제 캐릭터가 엄폐를 위해 핸들링하는 객체는 CoverSlot 이다.
CoverSlot 은 CoverSlotMarker 에 의해 NavigationOctree 에 추가되어 씬관리된다. 이후 프로그래머의 쿼리에 의해 일정 영역에 존재하는 CoverSlotMarker 를 반환하게 되며 프로그래머는 이들을 순회하며 적당한 커버를 찾고 일거리를 수행하게 된다. 관계도는 이걸 보면 좀 도움이 된다.
캐릭터는 레벨에 놓여있는 커버를 사용하기 위해 먼저 적당한 커버를 찾는 행동을 취하게 된다. 먼저 이 과정에 대해 알아보자.
GearPawn
GearPC
핸드라이팅 버전은 여기에
적당한 커버를 찾았다면 이제 커버를 대상으로 적당한 일거리를 수행해야 할 차례이다.
GoW2 에서는 커버를 향해 향해 달려드는 행동 (GSM_Run2MidCov 또는 GSM_Run2StdCov) 을 취하며, 이를 또 서버를 통해 다른 클라이언트로 복제를 수행하게 되는데 여기선 이 과정에 대해 알아본다.
GearPawn
GearPC
핸드라이팅 버전은 여기에
쭉 봐와서 알겠지만 GoW2 에서는 커버를 '숨을 수 있는 공간에 명시적으로 심어놓은 마커들의 상관관계를 정의해 놓은 메타데이터' 를 이용하여 구현한 것이다.
이 말인 즉슨 숨을 수 있는 공간이 아닌 다른 용도로써의 공간으로 확장도 가능하다는 얘기다. 당연히 별도의 로직 수정은 필요하지만 말이다.
배트맨 아캄 어사일럼에서 주인공이 와이어액션으로 매달릴 수 있는 석상이나 난간 등을 상상해보면 이해가 빠를 것이다.1)