도메인 리로딩 비활성화 옵션과 주의 사항

Posted by Eun JongHyeok on May 12, 2024
  1. Enter Play Mode Options
  2. Disabling Domain Reloading
    1. 호출 순서
    2. 정적 클래스 생성자

Enter Play Mode Options

실제 게임을 빌드하기 전에 에디터에서 플레이모드로 동작을 확인 할 수 있습니다.
이때 실제 코드가 변경된게 없더라도 매번 도메인 리로드와 씬 리로드가 진행됩니다.
씬이 많아지고 코드가 복잡해질수록 시간이 더 오래 걸리게 됩니다. 개발하는 입장에서 이 시간이 얼마나 답답한지 다들 공감하실 겁니다.😢

그래서 유니티에서는 이런 리로딩을 비활성화할 수 있는 옵션을 제공해주고 있습니다.
030
Project Settings - Editor - Enter Play Mode Settings에서 Enter Play Mode Options을 체크해주면 됩니다.

Disabling Domain Reloading

가이드에서 도메인 리로딩 옵션을 비활성화할때 정적 필드, 정적 이벤트 핸들러 사용에 주의를 주고 있습니다.
2번째 플레이 모드 진입시 이전 플레이 모드에서 세팅된 정적 필드, 이벤트 핸들러들이 그대로 남기 때문입니다.
따라서 직접 초기화 해주어야합니다.

  • 런타입 스크립트의 경우
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] 속성
  • 에디터 스크립트의 경우
    [InitializeOnEnterPlayMode] 속성

을 사용하도록 가이드하고 있습니다.

호출 순서

RuntimeInitializeOnLoadMethodInitializeOnEnterPlayMode을 통해 플레이모드 진입시 자동으로 메서드를 호출해줄 수 있습니다.
RuntimeInitializeOnLoadMethod에서는 RuntimeInitializeLoadType 타입들이 있습니다.

  • AfterSceneLoad
  • BeforeSceneLoad
  • AfterAssembliesLoaded
  • BeforeSplashScreen
  • SubsystemRegistration

이 타입들을 이용하면 더 자세하게 타이밍을 지정해 줄 수 있습니다.

실제 호출을 해보면 다음과 같은 순서로 실행되는 것을 확인하실 수 있습니다. 031

정적 클래스 생성자

정적 클래스 생성자가 있을 때는 여러번 호출하더라도 도메인 리로드가 안되면 한번만 호출됩니다.
따라서 정적 클래스 생성자내에 초기화 코드가 있을 경우 이를 따로 분리해주는게 좋습니다.


Domain_Reloading
RuntimeInitializeOnLoadMethod
InitializeOnEnterPlayMode

← Previous Post