언리얼 C++ 프로그래밍

[언리얼 C++] 게임 스테이트

언린이 2021. 8. 19. 09:44

게임 스테이트는 클라이언트가 게임의 상태를 모니터링할 수 있도록 해줍니다.

개념적으로 게임 스테이트는 접속된 모든 클라이언트가 알아야 하는 정보, 플레이어 개개인이 아닌 게임 모드에 관련된 정보를 관리해야 합니다. 그래서 접속된 플레이어 목록, 게임의 점수, 오픈 월드 게임에서 완료한 미션 등과 같은 게임 전반적인 프로퍼티 기록을 유지할 수 있습니다.

 

게임 스테이트는 게임에서 특정 플레이어가 팀 점수를 몇 점이나 올렸는지와 같은 개별 플레이어 단위의 기록을 유지하기에 좋은 곳은 아닙니다. 그런 부분은 플레이어 스테이트에서 보다 깔끔하게 처리할 수 있기 때문입니다.

일반적으로 게임 스테이트는 게임플레이 도중 변하면서 모두에게 관련이 있고 보일 수 있는 프로퍼티 기록을 유지해야 합니다. 게임 모드는 서버에만 존재하는 반면, 게임 스테이트는 서버에 존재하면서 모든 클라이언트에 리플리케이트되어 연결된 모든 기기의 게임 상태를 최신으로 유지합니다.

 

AGameStateBase 클래스는 기본 구현이며, 그 중 몇 가지 기본 함수 기능은 아래와 같습니다.

함수 또는 변수 용도
GetServerWorldTimeSeconds UWorld 클래스의 함수 GetTimeSeconds() 의 서버 버전으로, 클라이언트와 서버 양쪽에서 동기화되어 리플리케이션에 믿고 사용할 수 있는 시간으로 활용합니다.
PlayerArray 모든 APlayerState 오브젝트의 배열로, 게임의 모든 플레이어에게 어떤 작업을 할 때 유용합니다.
HasBegunPlay 게임의 액터에 대해 BeginPlay() 함수가 호출된 경우 true 를 반환합니다.

 

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

게임 스테이트를 만들때 대상으로 짝지어진 게임 모드를 기반으로 구체적인 변경사항이 이루어집니다. 게임 모드 자체에서도 그 기본 게임 스테이트 유형을 AGameStateBase 클래스에서 파생된 C++ 클래스 또는 블루프린트 클래스로 덮어쓸 수 있습니다.