Unity 6.3
0 онлайн 85 гостей 3 в системе
Вход

Сведения об отключении домена и перезагрузке сцены

Что Unity пропускает, когда перезагрузка домена и сцены отключены

С точки зрения высокого уровня, вход в режим Play состоит из следующих основных этапов:

  • Резервное копирование текущих сцен. Это происходит только при изменении сцены. Так Unity может вернуть сцены при выходе из режима воспроизведения в то состояние, в котором они были до его запуска.
  • Перезагрузка домена. Сброс состояния скриптов путём перезагрузки домена скриптов.
  • Перезагрузка сцены. Сброс состояния сцены путём её перезагрузки.
  • Обновить сцену. Это происходит дважды; один раз без рендеринга, и один раз с рендерингом.

Объединенные задачи перезагрузки домена и перезагрузки сцены сбросят домен скриптов и смоделируют поведение запуска приложения, как если бы оно запускалось в Проигрывателе. Unity пропускает эти шаги, если вы отключили их в Настройках Project.

На следующей диаграмме приведены подробные сведения о событиях, которые Unity пропускает при отключении перезагрузки домена и сцены. Синий цвет обозначает события, которые Unity пропускает при отключении перезагрузки домена, а зеленый — события, которые Unity пропускает при отключении перезагрузки сцены.

Функции событий в жизненном цикле скрипта MonoBehaviour. Функции событий, пропускаемые при отключении перезагрузки домена, выделены синим цветом. Функции событий, пропускаемые при отключении перезагрузки сцены, выделены зеленым цветом.
Функции событий в жизненном цикле скрипта MonoBehaviour. Функции событий, пропускаемые при отключении перезагрузки домена, выделены синим цветом. Функции событий, пропускаемые при отключении перезагрузки сцены, выделены зеленым цветом.

Что делает Unity, когда перезагрузка сцены и перезагрузка домена включены

С включенными перезагрузкой сцены и перезагрузкой домена, это полный список всех процессов и событий, которые Unity выполняет при входе в режим воспроизведения:

  1. Возбуждается событие AssemblyReloadEvent beforeAssemblyReload.
  2. Домен C# остановлен:
    a. OnDisable() вызван для всех ScriptableObjects и MonoBehaviours.
    b. Unity ожидает завершения всех асинхронных операций.
  3. состояние всех MonoBehaviour и ScriptableObject сериализуется.
    a. OnBeforeSerialize() называется.
    b. Сериализуются значения всех открытых и закрытых полей, кроме помеченных [NonSerialized].
  4. Управляемые обёртки отключены от основных объектов Unity.
  5. Детский Домен Unity перегружается:
    a. Mono домен разгружается:
    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. Вызываются методы с InitializeOnLoad и InitializeOnLoadMethod.
  10. Вызывается AssemblyReloadEvent afterAssemblyReload.

Дополнительные ресурсы