게임 실행 동안 유지되는 최상위 객체
게임플레이 클래스는 역할보다 살아있는 범위가 먼저다
GameMode, GameState, Controller, Pawn을 수명과 네트워크 가시성에 맞춰 놓으면 코드가 들어갈 자리가 분명해진다.
진행도, 설정, 세션 상태를 보존한다.
각 실행 환경의 오래 사는 저장소로 본다.
레벨 액터 포인터를 오래 붙잡지 않는다.
규칙과 승패를 결정하는 서버 전용 클래스
현재 맵의 기본 Pawn, Controller, HUD를 고른다.
클라이언트 UI가 직접 읽는 위치가 아니다.
관측 가능한 결과는 GameState로 내보낸다.
모두가 봐야 하는 진행 상태
라운드 상태와 플레이어별 점수를 담는다.
점수판과 남은 시간 표시의 읽기 위치다.
규칙 자체보다 결과 값을 안정적으로 공유한다.
입력과 카메라, UI 명령의 소유자
Pawn을 Possess하고 플레이어 의도를 전달한다.
다른 클라이언트에는 보통 직접 보이지 않는다.
월드 규칙을 들고 있기보다 명령을 보낸다.
월드에서 보이고 움직이는 몸체와 기능 묶음
메시, 충돌, 이동, 감지를 컴포넌트로 붙인다.
위치와 상태는 필요한 만큼만 네트워크에 싣는다.
이벤트, 타이머, 활성 조건으로 프레임 비용을 줄인다.
플레이어 의도는 Controller에서 시작하고 결과는 State가 보여준다
입력
Controller
Pawn
Mode 판정
State 복제
Tick은 객체의 권리가 아니라 매 프레임 지불하는 약속이다
입력
Actor
Physics
Animation
Render
레벨을 넘어 남아야 하면 GameInstance
세션과 설정은 보존하고, 월드 액터 참조는 레벨 수명에 묶어 둔다.
모두가 봐야 하면 State 계열
서버 규칙은 GameMode가 갖고, 표시할 결과만 State로 복제한다.
기능이 늘면 컴포넌트로 쪼갠다
이동, 감지, 체력, 상호작용을 상속 깊이보다 조립 단위로 관리한다.