클래스 관계도

게임플레이 코드는 수명, 권한, 소유 위치로 배치한다

GameInstance, GameMode, State, Controller, Pawn은 역할명이 아니라 데이터가 어디까지 살아 있고 누가 읽을 수 있는지를 나누는 기준이다.

수명 실행 전체, 월드, 플레이어 접속, 액터 스폰 단위
권한 서버 전용인지, 복제 상태인지, 소유자 전용인지
표현 보이는 몸체와 기능은 Pawn, Actor, Component에 둔다
비용 Tick은 필요한 객체에만 켜고 컴포넌트로 책임을 쪼갠다

먼저 살아있는 범위를 고르고, 그다음 네트워크 위치를 고른다

수명 우선 배치
실행 전체 월드가 바뀌어도 유지되는 자리
UGameInstance 세션, 설정, 진행도처럼 레벨 액터와 분리된 데이터를 둔다.
월드와 경기 현재 맵의 규칙과 모두가 보는 결과
AGameMode 서버에서만 규칙, 스폰, 라운드 종료를 판정한다.
AGameState / APlayerState 점수, 시간, 라운드처럼 클라이언트가 읽는 값을 공유한다.
플레이어와 액터 입력, 카메라, 보이는 몸체, 조립된 기능
APlayerController 입력과 UI 명령을 소유하고 Pawn을 조종한다.
APawn / ACharacter / Component 월드에 보이는 몸체와 이동, 감지, 체력 같은 기능을 맡는다.
클래스
살아있는 범위
네트워크 위치
맡길 코드
UGameInstance
실행 시작부터 종료까지
각 실행 환경의 로컬 저장소
세션, 설정, 레벨 간 유지 데이터
AGameMode
월드가 로드된 동안
서버 전용
규칙, 스폰, 승패, 기본 클래스 지정
GameState 계열
경기와 플레이어 상태 동안
서버 갱신 후 클라이언트에 복제
점수판, 남은 시간, 라운드 상태
APlayerController
플레이어 접속 동안
서버와 소유 클라이언트
입력 변환, 카메라, 로컬 UI 명령
Pawn, Actor, Component
스폰부터 파괴까지
액터 복제 정책을 따름
이동, 충돌, 감지, 체력, 상호작용

플레이어 입력은 몸체를 움직이고, 공개 결과는 State로 읽힌다

프레임 안의 책임 흐름
01 입력 수집 키보드, 마우스, 패드 값이 플레이어 쪽에서 들어온다.
02 Controller 판단 입력을 명령으로 바꾸고 UI나 카메라 상태를 다룬다.
03 Pawn 실행 월드 위치, 충돌, 이동 컴포넌트가 실제 변화를 만든다.
04 Mode 판정 서버 규칙이 점수, 스폰, 승패 같은 결과를 결정한다.
05 State 공유 클라이언트 UI는 복제된 공개 상태를 읽어 화면을 맞춘다.
레벨 액터 참조는 오래 붙잡지 않는다 GameInstance에는 월드가 바뀌어도 의미가 남는 데이터만 둔다.
클라이언트 UI가 규칙을 직접 읽지 않는다 GameMode의 판단은 GameState의 공개 결과로 전달한다.
기능이 늘면 상속보다 컴포넌트로 분리한다 Tick 비용과 재사용 단위를 Actor 아래 작은 책임으로 나눈다.