수명 먼저 배치

게임플레이 클래스는 역할보다 살아있는 범위가 먼저다

GameMode, GameState, Controller, Pawn을 수명과 네트워크 가시성에 맞춰 놓으면 코드가 들어갈 자리가 분명해진다.

UGameInstance

게임 실행 동안 유지되는 최상위 객체

레벨 전환 뒤에도 남음

진행도, 설정, 세션 상태를 보존한다.

복제 대상 아님

각 실행 환경의 오래 사는 저장소로 본다.

월드 참조와 데이터 분리

레벨 액터 포인터를 오래 붙잡지 않는다.

AGameMode

규칙과 승패를 결정하는 서버 전용 클래스

월드가 로드된 동안

현재 맵의 기본 Pawn, Controller, HUD를 고른다.

서버에만 존재

클라이언트 UI가 직접 읽는 위치가 아니다.

스폰·라운드·승패 판정

관측 가능한 결과는 GameState로 내보낸다.

AGameState / APlayerState

모두가 봐야 하는 진행 상태

월드·플레이어 수명

라운드 상태와 플레이어별 점수를 담는다.

서버에서 갱신, 클라에 복제

점수판과 남은 시간 표시의 읽기 위치다.

UI가 읽는 공개 상태

규칙 자체보다 결과 값을 안정적으로 공유한다.

APlayerController

입력과 카메라, UI 명령의 소유자

플레이어 접속 동안

Pawn을 Possess하고 플레이어 의도를 전달한다.

서버와 소유 클라이언트

다른 클라이언트에는 보통 직접 보이지 않는다.

입력 변환과 로컬 UI

월드 규칙을 들고 있기보다 명령을 보낸다.

APawn / ACharacter + Component

월드에서 보이고 움직이는 몸체와 기능 묶음

스폰부터 파괴까지

메시, 충돌, 이동, 감지를 컴포넌트로 붙인다.

액터 복제 정책을 따름

위치와 상태는 필요한 만큼만 네트워크에 싣는다.

Tick 비용을 가장 먼저 의심

이벤트, 타이머, 활성 조건으로 프레임 비용을 줄인다.

입력에서 공유 상태까지

플레이어 의도는 Controller에서 시작하고 결과는 State가 보여준다

입력 Controller Pawn Mode 판정 State 복제
프레임 비용 관리

Tick은 객체의 권리가 아니라 매 프레임 지불하는 약속이다

입력 Actor Physics Animation Render

레벨을 넘어 남아야 하면 GameInstance

세션과 설정은 보존하고, 월드 액터 참조는 레벨 수명에 묶어 둔다.

모두가 봐야 하면 State 계열

서버 규칙은 GameMode가 갖고, 표시할 결과만 State로 복제한다.

기능이 늘면 컴포넌트로 쪼갠다

이동, 감지, 체력, 상호작용을 상속 깊이보다 조립 단위로 관리한다.