Unreal Engine/개념정리
[UE5] - 게임 플레이 프레임워크 (GameMode / GameState / PlayerController / PlayerState) + GameInstance
KimGeon-U
2025. 1. 31. 19:41
게임 플레이 프레임워크(Game Play Framework)
- 언리얼 엔진을 통한 게임 개발 시 기본적으로 제공되는 핵심 클래스와 시스템들의 집합
- GameMode, GameState, PlayerController, PlayerState, HUD 같은 클래스들이 존재
- 플레이어 세부정보(해당 세션의 게임 작업 기여도, 킬로그, 캐릭터 클래스 등)
- 게임의 현재 상태에 대한 정보(게임 전체 작업 진행도, 진행 시간 등)
- 승리 조건에 대한 정보
- 위젯 및 HUD
- 입력
Game/Player... + Base
- 해당 클래스들의 부모 클래스
- Base를 제외한 클래스들은 게임을 설계시 필요한 기능들을 추가적으로 구현해둔 클래스들이다.
- Ex) GameMode
- 언리얼에서 제공하는 멀티플레이 기능을 거의 포함, 싱글플레이 가능
- GameState, PlayState에 대한 연동 활성화
- GameModeBase
- GameMode를 단순화 시키고 효율화 시킨 버전
- 멀티플레이 관련 로직이 일부 포함.
- 싱글플레이 / 멀티플레이 로직을 직접 구현하고 싶을 경우
※ GameMode VS GameModeBase 및 주요 함수
Game Mode
- 게임이 시작될 때 플레이어 스폰, 팀 배정, 게임 승패 조건 등 게임의 승리 조건 및 규칙을 정의한다.
- 해당 세션의 최대 입장 가능 플레이어 인원, 게임에 들어오는 방식, 일시정지, 레벨 전환 등을 정의한다.
- DefaultPawnClass, PlayerControllerClass 등을 사용하여 플레이어가 연결될 폰 및 컨트롤러들을 설정한다.
- 게임당 한개만 존재, 서버에서만 실행되며, 클라이언트에서는 직접 수정 할 수 없다.
- DefaultPawnClass, HUD Class, PlayerControllerClass, SpectatorClass, GameStateClass, PlayerStateClass 등을 설정 할 수 있다.
Game State
- 서버에만 속하지만, 모든 클라이언트에 복제된다.
- 클라이언트가 게임의 상태를 모니터링 할 수 있도록 도와준다.
- 게임에서 규칙과 관련된 이벤트 발생 시 추적, 모든 플레이어와 공유해야 하는 데이터 들을 정의한다.
- 해당 데이터(정보)들은 GameState를 통해 저장하는것이 적합하며, 모든 데이터들은 동기화(Sync)된다.
- 모든 클라이언트들이 공통적으로 영향을 미치는 데이터들을 저장하는 클래스
- 게임이 실행된 시간, 각 개별 플레이어가 게임에 참여한 시간 및 플레이어의 현재 상태
- 게임이 시작되었는지에 대한 여부, 게임의 작업 진행도 등
Game Instance
- 게임의 전체 수명동안 유지되는 클래스
- 게임의 시작부터 종료까지 존재하며, 레벨 간 상태유지 및 글로벌 데이터 관리에 적합하다.
- 싱글톤 구조로 설계되어있으며, 레벨이 전환되어도 삭제되지 않는다.
- 멀티플레이어 환경에서 호스트 및 연결관리를 위한 기능들을 포함하고 있다.
- 네트워크 관련 이벤트(연결 성공, 실패, 종료 등)을 포함하고있다.
- 게임이 시작될 때 자동으로 생성된다.
- 많은 데이터들을 저장시 의존성 문제가 발생한다.
- 글로벌환경의 State들을 관리시에 동기화 혹은 충돌 가능성이 있다.
- 이를 해결하기 위해서는 데이터를 개별 클래스로 나누고 GameInstance에서 참조하도록 설계해야한다.
- 게임 재시작시에도 GameInstance는 초기화 되지않으며, 명시적으로 데이터를 재설정 해야한다.
Player State
- GameState가 전체 게임 상태를 관리한다면, PlayerState는 플레이어별 데이터를 관리한다.
- 서버에서 생성된 후 Replicate를 통해 클라이언트와 동기화 하는 데이터
- 서버와 연결된 다른 클라이언트도 알아야 되는 정보
- 플레이어 사망처리
- 플레이어만 알아도 괜찮은 정보 -> Pawn Class, PlayerController
- Tab키를 누른 게임 상태창같은 경우
PlayerController
- 플레이어의 입력을 받아 Possess된 Pawn 또는 UI들을 제어한다.
- 클라이언트에서 입력을 받아 서버로 요청을 보낸다.
- 로컬 플레이어 전용 기능(UI, 카메라 조작)등을 처리한다.
- 플레이어의 입력을 감지하고 서버로 전송하는 역할
출처 및 참고내역
https://ebs12373.tistory.com/225
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/gameplay-framework-in-unreal-engine