도메인 및 씬 리로드 비활성화에 대한 세부 정보
Understand the work Unity performs during domain and scene reload
읽는 시간 2분최근 업데이트: 한 달 전
도메인 리로드와 씬 리로드가 비활성화되면 Unity가 건너뛰는 이벤트
전반적인 관점에서 보면 플레이 모드 시작은 다음의 주요 단계로 구성됩니다.
- 현재 씬 백업. 씬이 수정된 경우에만 발생합니다. 플레이 모드를 종료할 때 Unity가 플레이 모드를 시작하기 전의 상태로 씬을 되돌릴 수 있습니다.
- 도메인 리로드. 스크립팅 도메인을 다시 로드하여 스크립팅 상태를 초기화합니다.
- 씬 리로드. 씬을 다시 로드하여 씬 상태를 초기화합니다.
- 씬 업데이트. 이 동작은 렌더링 없이 한 번, 렌더링을 포함하여 한 번씩 총 두 번 수행됩니다.
도메인 리로드와 씬 리로드를 같이 수행하면 스크립팅 도메인을 초기화하고, 플레이어에서 실행하는 것처럼 애플리케이션의 시작 동작을 시뮬레이션합니다. 프로젝트 설정에서 비활성화하면 Unity가 이러한 단계를 건너뜁니다.
다음 다이어그램은 도메인 리로드와 씬 리로드가 비활성화된 경우 Unity가 건너뛰는 정확한 이벤트에 대한 상세 정보를 제공합니다. 파란색은 도메인 리로드가 비활성화된 경우 Unity가 건너뛰는 이벤트를 나타내고, 녹색은 씬 리로드가 비활성화된 경우 Unity가 건너뛰는 이벤트를 나타냅니다.
씬 리로드와 도메인 리로드가 모두 활성화되면 Unity가 수행하는 동작
씬 리로드와 도메인 리로드를 활성화하면 플레이 모드 시작 시 Unity가 다음과 같은 프로세스와 이벤트를 수행합니다.
-
AssemblyReloadEvent이벤트가 발생합니다.
beforeAssemblyReload -
C# 도메인이 중지됩니다.a. 모든 ScriptableObject 및 MonoBehaviour에이 호출됩니다.
OnDisable()b. Unity는 모든 비동기 작업이 완료될 때까지 기다립니다. -
모든 MonoBehaviour와 ScriptableObject의 상태가 직렬화됩니다.a.가 호출됩니다.
OnBeforeSerialize()b. 모든 공개 및 비공개 필드 값이로 표시된 값을 제외하고 직렬화됩니다.[NonSerialized] -
관리되는 래퍼가 네이티브 Unity 오브젝트에서 분리됩니다.
-
Unity 자식 도메인이 리로드됩니다.a. Mono 도메인이 언로드됩니다.i.이벤트가 발생합니다.
AppDomain.DomainUnloadii. Unity 자식 도메인이 삭제됩니다.-
GC와 파이널라이저가 호출됩니다.
-
스레드가 종료됩니다.
-
모든 JIT 정보가 삭제됩니다.
b. 새 Unity 자식 도메인이 생성됩니다. -
-
어셈블리가 로드됩니다.a. 시스템 어셈블리가 로드됩니다.b. Unity 어셈블리가 로드됩니다.c. 사용자 어셈블리가 로드됩니다.
-
동기화 컨텍스트가 초기화됩니다.
-
스크립팅 상태가 복원됩니다.a. 모든 Unity 오브젝트의 스크립트 가능한 부분이 다시 생성됩니다.i. 생성자가 호출되고 정적에 기본값이 할당됩니다.b. 모든 Unity 오브젝트의 상태가 역직렬화됩니다.i. 모든 Unity 오브젝트의 직렬화된 상태가 복원됩니다.
- 이벤트가 발생합니다.
OnAfterDeserialize
ii.가 호출됩니다.OnValidate()iii.속성을 사용하는 스크립트의 경우:[ExecuteInEditMode]-
이 호출됩니다.
OnEnable() -
이 호출됩니다.
OnDisable() -
가 호출됩니다.
OnDestroy()
-
InitializeOnLoad 및 InitializeOnLoadMethod가 있는 메서드가 호출됩니다.
-
AssemblyReloadEvent가 호출됩니다.
afterAssemblyReload