Сведения об отключении домена и перезагрузке сцены
Что Unity пропускает, когда перезагрузка домена и сцены отключены
С точки зрения высокого уровня, вход в режим Play состоит из следующих основных этапов:
- Резервное копирование текущих сцен. Это происходит только при изменении сцены. Так Unity может вернуть сцены при выходе из режима воспроизведения в то состояние, в котором они были до его запуска.
- Перезагрузка домена. Сброс состояния скриптов путём перезагрузки домена скриптов.
- Перезагрузка сцены. Сброс состояния сцены путём её перезагрузки.
- Обновить сцену. Это происходит дважды; один раз без рендеринга, и один раз с рендерингом.
Объединенные задачи перезагрузки домена и перезагрузки сцены сбросят домен скриптов и смоделируют поведение запуска приложения, как если бы оно запускалось в Проигрывателе. Unity пропускает эти шаги, если вы отключили их в Настройках Project.
На следующей диаграмме приведены подробные сведения о событиях, которые Unity пропускает при отключении перезагрузки домена и сцены. Синий цвет обозначает события, которые Unity пропускает при отключении перезагрузки домена, а зеленый — события, которые Unity пропускает при отключении перезагрузки сцены.
Что делает Unity, когда перезагрузка сцены и перезагрузка домена включены
С включенными перезагрузкой сцены и перезагрузкой домена, это полный список всех процессов и событий, которые Unity выполняет при входе в режим воспроизведения:
- Возбуждается событие AssemblyReloadEvent
beforeAssemblyReload. - Домен C# остановлен:
a.OnDisable()вызван для всех ScriptableObjects и MonoBehaviours.
b. Unity ожидает завершения всех асинхронных операций. - состояние всех MonoBehaviour и ScriptableObject сериализуется.
a.OnBeforeSerialize()называется.
b. Сериализуются значения всех открытых и закрытых полей, кроме помеченных[NonSerialized]. - Управляемые обёртки отключены от основных объектов Unity.
- Детский Домен Unity перегружается:
a. Mono домен разгружается:
i. СобытиеAppDomain.DomainUnloadвозникает.
ii. Детский Домен Unity уничтожается
1. GC и финализаторы вызываются.
2. Потоки прекращаются.
3. Вся информация JIT удаляется.
b. Создаётся новый Детский Домен Unity. - Загружаются сборки:
a. Загружаются системные сборки.
b. Загружаются сборки Unity.
c. Загружаются пользовательские сборки. - Инициализируется контекст синхронизации.
- Состояние скриптов восстанавливается.
a. Скриптовая часть всех Unity объектов воспроизводится.
i. Вызываются конструкторы, и статике присваиваются значения по умолчанию.
b. Состояние всех объектов Unity десериализуется:
i. Сериальные состояния всех Unity объекты восстановлены.
1.OnAfterDeserializeсобытие поднимается.
II. ВОПРОСЫ, КАСАЮЩИЕСЯ ДЕЯТЕЛЬНОСТИOnValidate()называется.
iii. Для скриптов, использующих[ExecuteInEditMode]атрибут:
1.OnEnable()называется.
2.OnDisable()называется.
3.OnDestroy()называется. - Вызываются методы с InitializeOnLoad и InitializeOnLoadMethod.
- Вызывается AssemblyReloadEvent
afterAssemblyReload.