1. GameMode, PlayerController, Pawn, PlayerState, GameState의 역할
언리얼 엔진의 게임플레이 프레임워크는 게임을 구성하는 기본 요소들을 체계적으로 관리하기 위한 클래스들의 집합이다. 이 프레임워크의 핵심을 이루는 GameMode, PlayerController, Pawn, PlayerState, GameState는 각각 명확히 구분된 역할을 수행하며, 특히 멀티플레이어 게임 환경에서 이들의 관계와 데이터 흐름을 이해하는 것은 매우 중요하다. 각 클래스를 "누가, 무엇을, 어디서, 어떻게" 하는지에 대한 역할극으로 비유하면 이해하기 쉽다.
- GameMode: 게임의 심판
- GameState: 게임의 공용 전광판
- PlayerController: 플레이어의 두뇌와 손
- PlayerState: 플레이어의 개인 명찰/점수판
- Pawn: 플레이어의 아바타
2. 각 클래스의 역할과 특징
A. AGameModeBase / AGameMode (게임 모드)
- 역할: 게임의 규칙(Rules)을 정의하고 관리하는 심판.
- 존재 위치: 서버에만 존재하며, 클라이언트에는 생성되거나 복제되지 않는다.
- 주요 책임:
- 게임의 승리/패배 조건, 매치 시간, 점수 획득 규칙 등을 정의한다.
- 새로운 플레이어가 접속했을 때의 처리(
PostLogin) 및 로그아웃 처리(Logout)를 담당한다. - 어떤
Pawn,PlayerController,GameState등의 클래스를 기본으로 사용할지 결정한다. - 플레이어의 스폰 및 리스폰 위치를 찾고,
Pawn을 생성하여PlayerController에 빙의시키는 과정을 관리한다.
AGameModevsAGameModeBase:AGameModeBase는 더 모듈화된 기본 클래스이며,AGameMode는 팀전, 매치 상태 관리 등 기존의 복잡한 게임 로직이 일부 포함된 상위 클래스다. 특별한 이유가 없다면AGameModeBase에서 시작하는 것이 권장된다.
B. APlayerController (플레이어 컨트롤러)
- 역할: 플레이어의 의지(Will) 또는 두뇌(Brain). 플레이어의 입력을 받아 게임 세계에 영향을 준다.
- 존재 위치: 서버와 해당 플레이어의 클라이언트에만 존재한다. 서버의 버전이 권위(Authority)를 가진다.
- 주요 책임:
- 키보드, 마우스, 게임패드 등 플레이어의 입력을 받아 처리한다.
Pawn에 빙의(Possess)하여Pawn을 조종한다.Pawn은 죽고 리스폰될 때 교체될 수 있지만,PlayerController는 일반적으로 레벨 내내 유지된다.- 플레이어의 카메라(
PlayerCameraManager)를 관리한다. - HUD나 메뉴 같은 클라이언트 측 UI와의 상호작용을 담당한다.
C. APawn / ACharacter (폰 / 캐릭터)
- 역할: 게임 세계에 존재하는 플레이어 또는 AI의 아바타(Avatar) 또는 육체(Body).
- 존재 위치: 서버와 모든 클라이언트에 복제되어 존재한다. 서버 버전이 권위(
Authority), 소유 클라이언트 버전이 자율 프록시(AutonomousProxy), 그 외 클라이언트 버전이 시뮬레이션 프록시(SimulatedProxy)다. - 주요 책임:
- 게임 월드 내에서 물리적인 형태를 가지며, 시각적으로 표현된다.
- 이동, 충돌 등 월드와의 상호작용을 직접 수행한다.
PlayerController나AIController로부터 조종 명령을 받아서 움직인다.
APawnvsACharacter:ACharacter는Pawn의 하위 클래스로, 이족보행에 특화된 기능들(걷기, 점프, 낙하 등)을 담당하는CharacterMovementComponent가 내장되어 있어 인간형 캐릭터를 구현하는 데 주로 사용된다.
D. APlayerState (플레이어 스테이트)
- 역할: 개별 플레이어의 상태 정보(State Info)를 담는 개인 점수판 또는 명찰.
- 존재 위치: 서버와 모든 클라이언트에 복제되어 존재한다.
- 주요 책임:
- 모든 사람이 알아야 하는 특정 플레이어의 정보를 저장하고 동기화한다.
- 예: 플레이어 이름, 점수, 킬/데스, 현재 핑, 소속 팀 등.
Pawn이 죽고 리스폰되어도PlayerState는 유지되므로, 플레이어의 누적 데이터를 보관하기에 적합하다.GameState의PlayerArray에 포함되어 모든 플레이어 목록을 구성한다.
E. AGameStateBase / AGameState (게임 스테이트)
- 역할: 게임 전체의 공용 상태(Global State)를 담는 공용 전광판.
- 존재 위치: 서버와 모든 클라이언트에 복제되어 존재한다.
- 주요 책임:
- 모든 플레이어가 알아야 하는 게임의 전반적인 상태를 저장하고 동기화한다.
- 예: 매치 시작 여부, 남은 게임 시간, 팀별 총점, 맵 이름 등.
GameMode가 서버에만 존재하는 '규칙'이라면,GameState는 그 규칙에 따라 변화하는 '상태'를 모두에게 공유하는 역할을 한다.- 모든
PlayerState의 목록을PlayerArray라는 배열로 가지고 있어, 현재 게임에 참여 중인 모든 플레이어의 정보를 순회할 수 있다.
3. 클래스 간 상호작용 및 데이터 흐름 (Player Join Flow)
- 접속: 클라이언트가 서버에 접속한다.
- 로그인: 서버의
GameMode에서PostLogin이벤트가 호출된다.GameMode는 이 플레이어를 위한PlayerController와PlayerState를 생성한다. - 스폰:
GameMode가RestartPlayer()함수를 호출하여 플레이어를 게임에 참여시킨다. 적절한 스폰 위치를 찾아Pawn을 스폰하고,PlayerController가 이Pawn에 빙의(Possess)하도록 한다. - 입력 및 제어: 플레이어가 클라이언트에서 키를 누르면, 클라이언트의
PlayerController가 입력을 감지한다. 이 입력은ServerRPC를 통해 서버의PlayerController로 전달된다. - 액션 수행: 서버의
PlayerController는 명령을 받아 자신의 권위있는Pawn에게 이동하라고 지시한다.Pawn의 위치가 변경된다. - 상태 복제:
Pawn의 변경된 위치(Transform)는 프로퍼티 복제를 통해 모든 클라이언트의Pawn프록시들에게 전송되어 부드럽게 움직이는 것처럼 보인다. - 게임 이벤트: 플레이어가 적을 죽이면,
GameMode가 이 이벤트를 처리한다.GameMode는 킬을 한 플레이어의PlayerState에 접근하여 점수를 올린다. - 상태 공유: 점수가 변경된
PlayerState는 모든 클라이언트로 복제된다. 또한, 팀 점수가 바뀌었다면GameState의 팀 점수 프로퍼티가 업데이트되고 이 역시 모든 클라이언트로 복제된다. - UI 업데이트: 각 클라이언트는 자신의 로컬
GameState와PlayerState들을 참조하여 HUD의 점수판을 최신 상태로 갱신한다.
4. 비교 요약표
| 클래스 | 핵심 역할 | 존재 위치 | 복제 여부 | 주요 데이터 |
|---|---|---|---|---|
| GameMode | 게임 규칙 (심판) | 서버 전용 | 복제 안 됨 | 승리 조건, 스폰 규칙 |
| GameState | 게임 상태 (전광판) | 서버 + 모든 클라이언트 | 모두에게 복제 | 게임 시간, 팀 점수, 플레이어 목록 |
| PlayerController | 플레이어 입력/제어 (두뇌) | 서버 + 소유 클라이언트 | 소유자에게만 관련 | 입력 처리, 카메라, UI 상호작용 |
| PlayerState | 플레이어 상태 (명찰) | 서버 + 모든 클라이언트 | 모두에게 복제 | 플레이어 이름, 개인 점수, 핑 |
| Pawn | 플레이어 표현 (아바타) | 서버 + 모든 클라이언트 | 모두에게 복제 | 위치, 체력, 외형 |
5. 구술 면접 대비 요약
이 다섯 클래스는 멀티플레이어 게임의 구조를 잡는 핵심 요소입니다.
- GameMode는 게임의 규칙을 정의하는 심판으로, 서버에만 존재합니다.
- GameState는 GameMode가 관리하는 게임의 현재 상태(예: 남은 시간, 팀 점수)를 모든 플레이어에게 복제해주는 공용 전광판입니다.
- PlayerController는 플레이어의 입력을 받아
Pawn을 조종하는 두뇌와 같은 역할을 하며, 서버와 해당 클라이언트에만 존재합니다. - PlayerState는 플레이어의 이름, 점수, 핑처럼 모든 사람이 알아야 할 개인 정보를 담아 모두에게 복제되는 명찰입니다.
- Pawn은 게임 세계에 실제로 보여지는 플레이어의 아바타로,
PlayerController의 조종을 받으며 모든 클라이언트에 복제됩니다.
간단히 말해, 서버의 GameMode가 규칙을 정하면, 그 결과로 변하는 게임 전체 상태는 GameState가, 플레이어 개별 상태는 PlayerState가 모든 클라이언트에게 공유합니다. 실제 조종은 PlayerController가 담당하고, 그 결과물은 Pawn으로 나타납니다. 이처럼 역할과 데이터 소유를 명확히 분리하여 복잡한 네트워크 게임을 효율적으로 관리할 수 있습니다.
'Unreal' 카테고리의 다른 글
| std::map과 TMap (0) | 2025.10.29 |
|---|---|
| UE5 ActorComponent와 SceneComponent (0) | 2025.10.28 |
| Remote Procedure Call (0) | 2025.10.27 |
| NetRole (0) | 2025.10.27 |
| Replication Condition (0) | 2025.10.24 |
