콘텐츠로 이동

Enter Play Mode 옵션을 켰을 때 static 초기화 처리

문서: https://docs.unity3d.com/kr/2021.1/Manual/ConfigurableEnterPlayMode.html

플레이 모드 진입이 빨라지는 이유

섹션 제목: “플레이 모드 진입이 빨라지는 이유”
  1. 도메인 리로드 안 함: 스크립트 초기화(static 필드 초기화, 등록된 핸들러 제거)를 하지 않는다.
  2. 씬 리로드 안 함: 디스크에서 씬을 메모리로 다시 읽지 않고 수정된 콘텐츠만 초기화한다.

모바일 슬롯 게임에 적용한 방법

섹션 제목: “모바일 슬롯 게임에 적용한 방법”

도메인 리로드를 건너뛰므로 static 상태가 이전 플레이의 값으로 남는다. 도메인이나 씬 로드 때 초기화되던 static 필드는 RuntimeInitializeOnLoadMethod 어트리뷰트로 직접 초기화한다.

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
static void InitStatic()
{
isAssetBundleInitialized = false;
FirebaseWrapper.Init.Done = false;
}

또한 싱글톤 MonoBehaviour는 인스턴스가 만들어지기 전에 참조되므로 Mono 생명주기 메서드로 초기화할 수 없다. 이런 경우 시작 지점(intro 씬의 Startup)에서 static 멤버 변수를 직접 초기화한다.

#if UNITY_EDITOR || UNITY_DEBUG
AppLogger.LogLevel = AppLogger.Level.DEBUG;
//AppLogger.OnWrite += OnLoggerWrite;
NetClient.appIsQuitting = false;
NetClient.Instance.Config.Log.Level = NetLogger.Level.DEBUG;
#else
AppLogger.LogLevel = AppLogger.Level.NEVER;
NetClient.appIsQuitting = false;
NetClient.Instance.Config.Log.Level = NetLogger.Level.NEVER;
#endif