언리얼 엔진은 멀티플레이어 게임을 위해 5개의 핵심 클래스로 게임 로직을 체계적으로 분리,
각 클래스는 역할과 책임을 가지면서 네트워크 환경에서 어디에 존재하는지가 중요
GameMode
역할
- 게임의 규칙과 로직을 관리하는 심판 역할
- 승리/패배 조건 판단, 게임 시작/종료 처리
- 플레이어 스폰 위치 결정
- 기본 Pawn, PlayerController 등 클래스 지정
특징
- 서버에만 존재 (클라이언트에는 없음)
- 클라이언트가 게임 규칙을 해킹할 수 없도록 보안 목적
- 싱글플레이어에서는 로컬 머신이 서버 역할
GameState
역할
- 게임 전체의 상태 정보 저장
- 모든 플레이어가 알아야 하는 정보 관리
- 경기 시간, 팀 점수, 게임 단계(진행중/종료)
- 전체 플레이어 목록 (PlayerState 배열)
- 날씨, 시간대 등 게임 환경 정보
특징
- 모든 클라이언트에 복제됨
- 게임이 시작되고 종료될 때까지 유지
- 스코어보드, HUD 등에 표시되는 전역 데이터
PlayerController
역할
- 플레이어의 입력(키보드, 마우스, 게임패드 등)을 받아 처리
- UI와 HUD 표시 관리
- 카메라 제어
- Pawn을 소유하고 조종
- 서버에 RPC 호출
특징
- 클라이언트와 서버 양쪽에 존재
- 플레이어 1명당 1개씩 생성
- 플레이어가 접속해 있는 동안 유지
- Pawn이 죽어도 PlayerController는 살아있음
Pawn
역할
- 게임 월드에 실제로 존재하는 물리적 캐릭터
- 3D 모델, 메시, 애니메이션 표시
- 이동, 충돌, 액션 수행
- 체력, 상태 등 물리적 속성 관리
특징
- 모든 클라이언트에서 보임
- PlayerController가 빙의(Possess)해서 조종
- 죽으면 사라지고 다시 스폰 가능
- Character는 Pawn에서 걷기, 점프 등 기능 추가
PlayerState
역할
- 플레이어의 점수, 통계, 정보 저장
- 킬/데스, 랭킹, 레벨
- 플레이어 이름, 팀 정보
- Pawn이 죽어도 유지되는 정보
특징
- 모든 클라이언트에 복제됨
- 플레이어가 접속해 있는 동안 유지
- 다른 플레이어도 볼 수 있어야 하는 정보
- 스코어보드에 표시되는 개인 데이터
| 클래스 | 위치 | 수명 | 주요 역할 | 저장 데이터 |
|---|
| GameMode | 서버만 | 레벨 로드~언로드 | 규칙, 승패 판정 | 게임 로직 |
| GameState | 모든 곳 | 레벨 로드~언로드 | 전체 상태 | 팀 점수, 남은 시간 |
| PlayerController | 서버 + 본인 클라 | 접속~종료 | 입력, UI | 카메라, 입력 설정 |
| PlayerState | 모든 곳 | 접속~종료 | 플레이어 정보 | 킬/데스, 점수 |
| Pawn | 모든 곳 | 스폰~죽음/언빙의 | 물리적 존재 | 체력, 위치, 메시 |
생성 순서
- GameMode (서버, 레벨 로드 시)
- GameState (서버 생성 → 클라이언트 복제)
- PlayerController (플레이어 접속 시)
- PlayerState (PlayerController 생성 직후, PlayerController가 소유)
- Pawn (GameMode가 스폰)
소멸 순서
플레이어 종료 시:
1. Pawn 소멸 (UnPossess)
2. PlayerState 소멸
3. PlayerController 소멸
레벨 전환 시:
- PlayerController, PlayerState → 유지
- GameMode, GameState → 소멸 후 새로 생성
- Pawn → 보통 소멸 후 새 레벨에서 새로 스폰