GAME INSTANCE STATE

Game Instance 런타임 상태

Game Instance는 게임 실행 동안 유지되지만 레벨 액터처럼 월드에 속하지 않고, SaveGame처럼 영구 저장을 보장하지도 않는다. 메뉴에서 플레이 레벨로 넘어가는 선택 상태, 세션 정보, 임시 설정처럼 수명 주기가 맞는 데이터만 담아야 한다.

01

상태 수명 주기 확인

한 레벨에서만 쓰는지, 레벨 전환을 넘어야 하는지, 앱 종료 뒤에도 남아야 하는지 구분한다.

수명이 다르면 저장 위치도 달라진다
02

Game Instance 사용

메뉴 선택, 임시 프로필, matchmaking 정보처럼 실행 동안 유지될 값을 둔다.

월드 액터 참조를 오래 들고 있으면 stale reference가 된다
03

SaveGame 분리

종료 후 보존할 진행도, 설정, 해금 정보는 SaveGame으로 직렬화한다.

Game Instance 값은 앱이 꺼지면 사라진다
04

멀티플레이 구분

클라이언트별 로컬 상태와 서버 권한 상태를 PlayerState, GameState와 나눠 둔다.

Game Instance는 네트워크로 복제되지 않는다
05

초기화/복원

레벨 로드, 메뉴 복귀, 재접속 시 값을 언제 채우고 언제 비울지 정한다.

남은 값이 다음 세션을 오염시킬 수 있다
Game Instance
런타임 전역 상태 레벨 사이에 유지되지만 저장과 복제는 별도 처리해야 한다.
전역 접근 편의 때문에 남용되기 쉽다
SaveGame
영구 저장 앱 종료 후에도 필요한 값은 명시적으로 저장하고 로드한다.
버전 변경에 대비한다
PlayerState
플레이어별 복제 상태 멀티플레이 점수, 이름, 팀처럼 네트워크에 보여야 하는 값에 쓴다.
로컬 메뉴 선택과 구분한다
GameMode
서버 규칙 게임 규칙과 스폰 흐름은 서버 전용 클래스에 둔다.
클라이언트에서 직접 접근할 수 없다

상태 확인

레벨 전환 메뉴, 플레이, 결과 화면을 오가며 값이 남아야 할 때만 남는지 확인한다.
앱 재시작 꺼졌다 켜도 필요한 값은 SaveGame에서 복원되는지 본다.
멀티플레이 클라이언트별 값과 서버 권한 값이 Game Instance에 섞이지 않았는지 점검한다.