Unreal C++ Gameplay Framework

게임 규칙, 공유 상태, 입력, 월드 객체를 서로 다른 클래스가 맡는다

언리얼 C++에서 중요한 것은 상속 관계만 외우는 것이 아니라, 수명 주기와 네트워크 권한에 맞춰 로직을 배치하는 것입니다.

간략화된 프레임 관점

Input PlayerController가 입력을 해석
Game Logic 규칙, 상태, Actor 로직 업데이트
Tick 대상 Tick은 활성화된 Actor/Component만
Physics / AI / Animation 월드와 표현 상태 갱신
Render / Audio 카메라 기준 화면과 사운드 출력
Replication 서버 상태를 클라이언트로 동기화

수명 주기

전체 실행 UGameInstance

게임 실행 컨텍스트 동안 유지되며 레벨 전환 후에도 남는 데이터를 둡니다.

월드 단위 UWorld / Level

현재 로드된 월드와 액터 집합을 담습니다. 레벨 전환 시 많은 객체가 새로 만들어집니다.

기본 객체계 UObject

Reflection + GC, 직렬화, 에디터 노출의 기반이 됩니다.

World Object AActor

월드에 배치되거나 스폰되는 기본 게임플레이 객체입니다.

규칙과 공유 상태

Server Only AGameModeBase / AGameMode

승패 조건, 스폰 규칙, 기본 Pawn/Controller/HUD 클래스를 정합니다. GameMode는 클라이언트에 복제되지 않음.

Replicated AGameStateBase / AGameState

점수, 라운드, 남은 시간처럼 모든 클라이언트가 알아야 하는 상태를 담습니다. GameState는 서버에서 클라이언트로 복제.

GameMode가 규칙을 결정하고, GameState가 관측 가능한 결과를 배포합니다.

클라이언트 UI가 필요한 정보는 GameMode가 아니라 GameState나 PlayerState에 두는 편이 자연스럽습니다.

Input 입력 이벤트 수집
Tick Actor / Component 로직
Physics / AI 월드 상태 갱신
Render 최종 장면 표시

제어와 표현

Owner Client + Server APlayerController

PlayerController는 서버와 소유 클라이언트 중심으로 존재하며, 입력과 카메라, UI 명령을 게임 로직으로 바꾸고 Pawn을 Possess합니다.

Possessed Actor APawn / ACharacter

월드 안에서 실제로 움직이는 플레이어 또는 AI 객체입니다.

Composition UActorComponent / USceneComponent

메시, 카메라, 충돌, 사운드, 커스텀 기능을 Actor에 조립합니다.

무엇을 어디에 둘까

목적
적합한 클래스
이유
주의점
레벨을 넘어 유지
UGameInstance 세션, 설정, 진행 데이터
수명 주기가 길다 월드가 바뀌어도 유지
월드 Actor 참조 주의 레벨 전환 후 무효화될 수 있음
게임 규칙
AGameMode 승패, 스폰, 모드 흐름
서버 권한 규칙을 한 곳에서 결정
클라이언트에 없음 UI 표시 데이터는 GameState로
플레이어 조작
APlayerController 입력, 카메라, UI 명령
Pawn을 Possess 조작 대상을 바꿀 수 있음
소유자 기준 다른 클라이언트에는 보통 없음