[Unity Doc](https://docs.unity3d.com/Manual/ExecutionOrder.html)
<br>
### Описание жизненного цикла
<br>
Жизненный циклу Unity работает по следующему принципу: Все типы событий вызываются по очереди снова и снова в каждом новом кадре. Пока Unity не пройдется по всем событиям одного типа, Unity не возьмется за следующий. На странице документации нарисована последовательность вызовов событий. Вот эта последовательность идет по кругу в каждом кадре.
Может возникнуть вопрос, а зачем выполнять все события типа Awake каждый кадр, если игра уже давно запущена? Ответ прост, потому что gameobjects могут создаваться не только во время игры, но и в процессе.
<br>
##### Когда игра только запускается
Примечание:
У неактивных gameobjects, никакие методы не вызываются, до тех пор, пока кого-то из них разработчик самостоятельно не активирует.
Сначала вызываются все методы Awake всех скриптов последовательно, которые есть на сцене.
После вызова всех методов Awake, последовательно вызываются все OnEnable.
После вызова всех OnEnable, непосредственно перед тем как Unity начнет вызывать все методы update для первого кадра, вызываются все методы Start.
Игра запущена.
<br>
##### После запуска игры
Начинается цикл обновления для каждого кадра:
- Вызываются последовательно все методы update
- После вызова всех методов update, последовательно вызываются LateUpdate().
В данном подразделе «после запуска игры» описана лишь малая часть событий. Остальное есть в документации Unity в виде иллюстрации.
<br>
##### Конец жизненного цикла gameobject
OnApplicationQuit: This function is called on all game objects before the application is quit. In the editor it is called when the user stops playmode.
OnDisable(): Вызывается, когда объект становится неактивным.
OnDestroy(): Вызывается, когда объект удаляется.
<br>
### Порядок выполнения методов одного типа
Есть фундаментальная последовательность всех типов методов - это последовательность фундаментальна и неизменяема (она описана выше)
Последовательность вызовов методов одного типа (например awake) - задается в Script Execution Order (порядок выполнения скриптов)
Механизм, позволяет контролировать порядок, в котором вызываются определённые методы жизненного цикла в ваших скриптах. Это может быть полезно в ситуациях, когда вам нужно гарантировать, что один скрипт выполняется до или после другого (в рамках вызовов метода одного типа).
Порядок выполнения скриптов устанавливается в редакторе Unity, через меню: Edit -> Project Settings -> Script Execution Order. Здесь можно добавить скрипты и установить их приоритеты.
Скрипты с более низким числом будут вызываться раньше. Например, если у скрипта A приоритет 100, а у скрипта B - 200, то Awake(), Start() и Update() в скрипте A будут вызваны до соответствующих функций в скрипте B. Если скрипт не добавлен в "Script Execution Order", то его приоритет по умолчанию равен 0.
Не гарантирует полную блокировку.
Если есть вопрос, почему не гарантирует, то нужно перечитать данную заметку с самого начала.
Краткий ответ почему:
1. Потому что Script Execution Order просто определяет последовательность вызова методов одного типа
2. Потому что жизненный цикл работает так, что пока все методы одного типа не будут вызваны, другие методы одного типа вызываться не будут.
<br>
### Awake
Вызывается только один раз за всю жизнь экземпляра gameobject.
Метод вызывается сразу после того, как префаб был инициализирован на сцене.(Если GameObject неактивен во время запуска, Awake не вызывается до тех пор, пока он не станет активным).
если MonoBehaviour-скрипт был добавлен в инспекторе к активному GameObject, то метод Awake сработает в следующем кадре обновления, после того, как игра была запущена. Если GameObject неактивен в момент добавления скрипта, Awake вызовется после того, как GameObject станет активным.
Однако, если вы добавляете скрипт во время выполнения при помощи AddComponent, Awake и Start будут вызваны сразу же после добавления скрипта, до следующего кадра обновления.
Обратите внимание, что Awake вызывается только один раз за жизненный цикл экземпляра скрипта. Если скрипт или GameObject деактивированы, а затем активированы снова, Awake не будет вызываться вновь.
<br>
### OnEnable
Метод OnEnable() вызывается каждый раз, когда объект становится активным. Это может происходить несколько раз в жизненном цикле объекта, включая первую инициализацию. Если объект уже активен на момент инициализации, OnEnable() будет вызван сразу после Awake().
<br>
### Start
Метод Start() вызывается только один раз для каждого экземпляра объекта.
<br>
### OnDestroy
Эта функция вызывается, когда объект помечен для удаления, и это последнее, что вызывается на этом объекте перед тем, как он будет окончательно удален в конце кадра.
<br>
##### метод Ondisable вызывается моментально с момента setActive(false)?
OnDisable вызывается в конце текущего кадра обновления, после всех обновлений логики игры. Это означает, что если вы вызываете SetActive(false) в середине кадра (например, в Update), OnDisable не будет вызван до окончания текущего кадра.
Not found
This page does not exist