Version: 2020.3
씬 재로드
실행 시 에디터 스크립트 코드 실행

도메인 및 씬 재로드 비활성화에 대한 세부 정보

도메인 재로드와 씬 재로드가 비활성화되면 Unity가 건너뛰는 이벤트

높은 수준의 관점에서 플레이 모드 시작은 다음의 주요 단계로 구성됩니다.

  • 현재 씬 백업. 씬이 수정된 경우에만 발생합니다. 이를 통해 Unity는 플레이 모드가 종료될 때 씬을 플레이 모드 시작 전의 상태로 되돌릴 수 있습니다.
  • 도메인 재로드. 스크립팅 도메인을 다시 로드하여 스크립팅 상태를 초기화합니다.
  • 씬 재로드. 씬을 다시 로드하여 씬 상태를 초기화합니다.
  • 씬 업데이트. 이 동작은 두 번, 즉 렌더링 없이 한 번, 렌더링을 포함하여 한 번 수행됩니다.

도메인 재로드씬 재로드를 같이 수행하면 스크립팅 도메인을 초기화하고, 플레이어에서 실행하는 것처럼 애플리케이션의 시작 동작을 시뮬레이션합니다. 프로젝트 설정에서 이 설정을 비활성화하면 Unity가 이러한 단계를 건너뜁니다.

아래 다이어그램은 도메인 재로드와 씬 재로드가 비활성화되면 Unity가 건너뛰는 이벤트에 대한 상세한 정보를 제공합니다. 파란색은 도메인 재로드가 비활성화되면 Unity가 건너뛰는 이벤트이고, 녹색은 씬 재로드가 비활성화되면 Unity가 건너뛰는 이벤트입니다.

씬 재로드와 도메인 재로드가 모두 활성화되면 Unity가 수행하는 동작

씬 재로드와 도메인 재로드를 활성화한 경우 플레이 모드 시작 시 Unity는 다음과 같은 프로세스와 이벤트를 수행합니다.

  1. AssemblyReloadEvent beforeAssemblyReload 이벤트가 발생합니다.
  2. C# 도메인이 중지됩니다.
    a. OnDisable()이 모든 ScriptableObject와 MonoBehaviour에 대해 호출됩니다.
    b. Unity가 모든 동기화 작업이 끝날 때까지 기다립니다.
  3. 모든 MonoBehaviour와 ScriptableObject의 상태가 직렬화됩니다.
    a. OnBeforeSerialize()가 호출됩니다.
    b. [NonSerialized]로 표시된 값을 제외하고, 모든 퍼블릭 및 프라이빗 필드 값이 직렬화됩니다.
  4. 관리되는 래퍼가 네이티브 Unity 오브젝트에서 분리됩니다.
  5. Unity 자식 도메인이 다시 로드됩니다.
    a. 모노 도메인이 언로드됩니다.
    i. AppDomain.DomainUnload 이벤트가 발생합니다.
    ii. Unity 자식 도메인이 삭제됩니다.
    1. GC와 파이널라이저가 호출됩니다.
    2. 스레드가 종료됩니다.
    3. 모든 JIT 정보가 삭제됩니다.
    b. 새로운 Unity 자식 도메인이 생성됩니다.
  6. 어셈블리가 로드됩니다.
    a. 시스템 어셈블리가 로드됩니다.
    b. Unity 어셈블리가 로드됩니다.
    c. 사용자 어셈블리가 로드됩니다.
  7. 동기화 컨텍스트가 초기화됩니다.
  8. 스크립팅 상태가 복원됩니다.
    a. 모든 Unity 오브젝트의 스크립터블 파트가 다시 생성됩니다.
    i. 생성자가 호출되고 정적 값에 기본 값이 할당됩니다.
    b. 모든 Unity 오브젝트의 상태가 역직렬화됩니다.
    i. 모든 Unity 오브젝트의 직렬화된 상태가 복원됩니다.
    1. OnAfterDeserialize 이벤트가 발생합니다.
    ii. OnValidate()가 호출됩니다.
    iii. [ExecuteInEditMode] 속성을 사용하는 스크립트의 경우 다음을 수행합니다.
    1. OnEnable()이 호출됩니다.
    2. OnDisable()이 호출됩니다.
    3. OnDestroy()가 호출됩니다.
  9. InitializeOnLoadInitializeOnLoadMethod가 포함된 메서드가 호출됩니다.
  10. AssemblyReloadEvent afterAssemblyReload가 호출됩니다.
씬 재로드
실행 시 에디터 스크립트 코드 실행
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961