[UE4] 게임 모드, 게임 스테이트

세동네·2022년 3월 25일
0
post-thumbnail

언리얼 엔진에서 플레이 중인 게임의 정보를 처리하는 클래스는 크게 게임 모드게임 스테이트, 둘로 나뉜다. 매우 간단한 게임일지라도 게임을 통제하는 규칙은 존재하며 이러한 규칙들이 게임 모드를 이룬다. 기본적으로 게임 모드에 포함되는 규칙들의 예시는 다음과 같다.

  • 존재하는 플레이어와 관람자의 수는 물론, 허용된 플레이어와 관람자 최대 수
  • 플레이어가 게임에 들어오는 방식, 스폰 위치 선택 규칙과 기타 스폰/리스폰 동작 포함 가능
  • 게임 일시정지 가능 여부, 게임 일시정지 처리 방식
  • 레벨간의 전환, 게임의 시네마틱 모드 시작 여부 포함

이러한 게임 모드에서 관리하는 규칙의 특징은 게임 중에 변하지 않을 정보들이라는 것이다. 자주 혹은 종종 변경될 수 있는 정보는 게임 모드에서 관리하지 않는 것이 좋다. 또한 게임 형식, 미션 유형, 특별 지역 규칙 등(예를 들어 하나의 FPS 게임 내에 데스매치, 폭파 임무, 점령전 등이 있는 식)에 따라 AGameModeBase의 서브클래스를 생성할 수 있다. 한 게임에 여러 게임 모드가 있을 수 있지만, 한 번에 하나의 게임 모드만 사용할 수 있다.

반면 게임에 규칙 관련 이벤트가 발생하고 트래킹을 통해 정보를 모든 플레이어가 공유할 필요가 있을 때, 그 정보는 게임 스테이트에 보관되고 그를 통해 동기화된다. 그 정보의 예시는 다음과 같다.

  • 게임 실행 기간 (로컬 플레이어 참가 전 실행 시간 포함).
  • 각 플레이어의 게임 참가 기간, 그 플레이어의 현재 상태.
  • 현재 게임 모드의 베이스 클래스.
  • 게임 시작 여부.

· 게임 모드

UE 4.14 버전부터 AGameModeBase가 도입되었다. 이는 모든 게임 모드의 베이스 클래스로, 고전 AGameMode 클래스를 단순화하고 효율화시킨 버전이다. 4.14 이전의 게임 모드 베이스 클래스였던 AGameMode는 기능도 그대로이고 사용하는 방법도 똑같지만 이젠 AGameModeBase의 자손이 되었다.

AGameMode는 경기 상태 개념 구현 방식상 멀티플레이어 슈팅 게임과 같은 유형에 보다 적합하다. EnteringMap(맵 진입), WaitingToStart(시작 대기 중), InProgress(진행 중), WaitingPostMatch(경기 후 대기) 등 경기 상태에 대한 부가 함수를 지원하며, 자세한 내용은 UE4 공식 문서 - 게임 모드와 게임 스테이트의 'AGameMode' 항목에 자세히 나와 있다.

· 게임 스테이트

게임 스테이트는 클라이언트가 게임의 상태를 모니터링할 수 있도록 해준다. 접속한 모든 클라이언트가 알아야 하는 정보, 플레이어 개개인이 아닌 게임 모드에 관련된 정보를 관리해야 한다. 따라서 접속한 플레이어 목록, 팀의 게임 점수, 오픈 월드 게임에서 완료한 미션 등 다양한 게임 전반적인 프로퍼티 기록을 유지할 수 있다.

FPS 게임에서 팀 킬 스코어 중 특정 플레이어의 킬 스코어가 몇 점인지와 같은 개별 플레이어의 기록을 유지하기 좋은 곳은 아니다. 그런 내용은 플레이어 스테이트에서 보다 깔끔하게 처리할 수 있다. 일반적으로 게임 스테이트는 게임플레이 도중 변하면서 모두에게 관련이 있고 보일 수 있는 프로퍼티 기록을 유지해야 한다. 게임 모드는 서버에만 존재하지만 게임 스테이트는 서버에 존재하면서 모든 클라이언트에 리플리케이트되어, 연결된 모든 기기의 게임 최신 상태를 유지한다.

AGameStateBase가 기본 구현이며, 게임에서 무슨 일이 벌어지고 있는지 플레이어에게 지속적으로 알리기 위해 필요한 변수와 함수를 넣기 위해 C++ 또는 블루프린트로 자주 확장시키는 클래스이다.

0개의 댓글