Что пропускает Unity при отключении перезагрузки домена и перезагрузки сцены
С точки зрения высокого уровня вход в игровой режим состоит из следующих основных этапов:
-
Резервное копирование текущих сцен. Это происходит только в том случае, если СценаСцена содержит среду и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь был изменен. Позволяет Unity возвращать сцены при выходе из режима воспроизведения в состояние, в котором они находились до запуска режима воспроизведения. - Перезагрузка домена. Сбрасывает состояние сценария, перезагружая домен сценария.
- Перезагрузка сцены. Сбрасывает состояние сцены путем перезагрузки сцены.
-
Обновить сцену. Это происходит дважды; один раз без рендерингаПроцесс вывода графики на экран (или текстуры рендеринга). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
См. в Словарь и один раз с визуализацией.
Объединение задач Перезагрузка домена и Перезагрузка сцены сбрасывает домен сценария и имитирует поведение вашего приложения при запуске, как если бы оно выполнялось в проигрывателе. Unity пропускает эти шаги, если вы отключаете их в Настройках проекташирокий набор настроек, которые позволяют вам настроить, как физика, звук, Сеть, графика, ввод и многие другие области вашего проекта ведут себя. Подробнее
См. в Словарь.
На диаграмме ниже представлена подробная информация о конкретных событиях, которые Unity пропускает при отключении перезагрузки домена и перезагрузки сцены. Синим цветом обозначены события, которые Unity пропускает, когда отключена перезагрузка домена, а зеленым — события, которые Unity пропускает, когда отключена перезагрузка сцены.
Что делает Unity при включении перезагрузки сцены и перезагрузки домена
При включенной перезагрузке сцены и перезагрузке домена это полный список всех процессов и событий, которые Unity выполняет при входе в режим воспроизведения:
- Вызывается событие AssemblyReloadEvent
beforeAssemblyReload
. - Домен C# остановлен:
а.OnDisable()
вызывается для всех объектов ScriptableObject и MonoBehaviours.
б. Unity ожидает завершения всех асинхронных операций. - Состояние всех объектов MonoBehaviours и ScriptableObject сериализуется.
а. ВызываетсяOnBeforeSerialize()
.
б. Все значения открытых и закрытых полей сериализуются, кроме тех, которые отмечены[NonSerialized]
. - Управляемые оболочки отключены от собственных объектов Unity.
- Дочерний домен Unity перезагружается:
а. Выгрузка монодомена:
я. Возникает событиеAppDomain.DomainUnload
.
II. Дочерний домен Unity уничтожен
1. Вызываются GC и финализаторы.
2. Потоки закрыты.
3. Вся информация JIT удаляется.
б. Новый дочерний домен Unity создан. - Сборки загружены:
а. Системные сборки загружены.
б. Сборки Unity загружены.
в. Пользовательские сборки загружены. - Контекст синхронизации инициализирован.
- Состояние сценария восстановлено.
а. Часть всех объектов Unity, допускающая выполнение сценариев, создается заново.
я. Вызываются конструкторы, и статическим параметрам присваиваются значения по умолчанию.
б. Состояние всех объектов Unity десериализуется:
я. Восстанавливается сериализованное состояние всех объектов Unity.
1. Возникает событиеOnAfterDeserialize
.
II. ВызываетсяOnValidate()
.
III. Для скриптовфрагмент кода, позволяющий создавать собственные компоненты, запускать игровые события, изменять свойства компонентов с течением времени и реагировать на пользовательский ввод любым удобным для вас способом. Подробнее
См. в Словарь с помощью[ExecuteInEditMode]
атрибут:
1. ВызываетсяOnEnable()
.
2. ВызываетсяOnDisable()
.
3. ВызываетсяOnDestroy()
. - Методы с InitializeOnLoad и InitializeOnLoadMethod вызываются.
- Вызывается событие AssemblyReloadEvent
afterAssemblyReload
.