게임의 구조를 정의하고 관리하는 시스템
역할
- 게임 루프 관리
- 플레이어 입력 / AI 동작 관리
- 게임 상태 저장 및 전환
- 월드 내 액터 관리
클래스
AGameModeBase
- 게임 규칙을 정의하는 클래스
- 메인 캐릭터, 점수 시스템 설정
- 싱글/멀티 플레이 설정 가능
- StartPlay() - 게임 시작 시 호출
- HandleStartingNewPlayer() - 새로운 플레이어가 참가할 때
AGameStateBase
- 게임의 전체 상태를 관리
- 시간, 점수 등
- 클라이언트와 동기화되어 게임의 진행 상황 공유
- OnRep_MatchState() - 게임 상태가 변경될 때 호출
- SetMatchState() - 새로운 게임 상태를 설정
UGameInstance
- 게임이 실행되는 동안 유지되는 싱글톤 클래스
- 세션 관리, 데이터 저장, 게임 간 데이터 유지 등에 사용
- Init() - 게임 시작 시 호출 됨
AHUD
- 게임 화면에 UI 요소를 직접 그리는 클래스
- 체력 바, 크로스헤어, 점수 등을 표시
- UUserWidget을 활용
- DrawHUD() - HUD를 그리는 함수
APlayerState
- 개별 플레이어의 점수 팀 정보, 네트워크 ID 등을 저장
- 멀티플레이어에서 사용
- OnRep_Score() - 점수 변경 시 호출
APlayerController
- 플레이어의 입력을 받아 제어
- 카메라 조장, UI 입력, 서버-클라이언트 간 네트워크 처리
- SetupInputComponent() - 입력을 설정
- Possess(APawn* 폰이름) - 특정 폰을 조종하도록 설정
동작 방식
- 게임 실행 시 UGameInstance 초기화
- 월드가 생성되면서 AGameModeBase 활성화
- APlayerController가 플레이어를 관리 및 조종
- 게임이 진행되면서 AGameStateBase가 전체 상태 유지
- 플레이어 상태는 APlayerState에서 관리
- HUD가 UI를 표시 / UUserWidget을 통해 화장