onenable unity что это

Русские Блоги

Жизненный цикл скрипта Unity и порядок выполнения

Каталог статей

В Unity сценарий можно понимать как код инструкции, прикрепленный к игровому объекту для определения поведения игрового объекта. Должен быть привязан к игровому объекту, чтобы начать его жизненный цикл. Игровой объект можно понимать как контейнер, который может содержать различные компоненты.Все компоненты игрового объекта вместе определяют поведение объекта и производительность в игре.

Жизненный цикл скрипта

Общие неизбежные события в скриптах Unity показаны в следующей таблице.

имяВремя срабатыванияиспользовать
AwakeВызывается при создании экземпляра скриптаИспользуется для инициализации игровых объектов, обратите внимание, что выполнение Awake происходит раньше, чем функция Start всех скриптов.
OnEnableВызывается, когда объект становится доступным или активнымиспользовать
StartФункция обновления вызывается перед первым запускомИспользуется для инициализации игровых объектов
UpdateВызывается один раз за кадрИспользуется для обновления игровой сцены и статуса
FixedUpdateВызывается один раз через каждый фиксированный физический временной интервалИспользуется для обновления физического статуса
LateUpdateВызывается один раз за кадр (вызов после обновления)Используется для обновления игровой сцены и состояния, и здесь обычно размещаются обновления, связанные с камерой.
OnGUIРендеринг и обработка событий OnGUIиспользовать
OnDisableВызывается, когда текущий объект недоступен или неактивениспользовать
OnDestroyВызывается, когда текущий объект уничтожаетсяиспользовать

Следующий код будет смотреть на время этих неизбежных событий.
Создайте новый сценарий C #, добавьте следующий код и повесьте его на любой игровой объект.

Результат печати следующий:

onenable unity что это. Смотреть фото onenable unity что это. Смотреть картинку onenable unity что это. Картинка про onenable unity что это. Фото onenable unity что это

Можно обнаружить, что функции Awake и Start вызываются один раз при создании игрового объекта.
Когда видимое состояние скрипта регулируется во время игры, функции OnEnable и OnDisable будут вызываться соответственно, а Awake и Start больше не будут вызываться, что означает, что после монтирования скрипта, Пробуждение и запуск имеют и будут выполнены только один раз.
Функции Update, FixedUpdate, LateUpdate, OnGUI вызываются несколько раз во время игры (число в правой части окна журнала указывает, сколько раз было напечатано сообщение журнала).
Наконец, когда игровой объект будет уничтожен, по очереди будут вызываться функции OnDisable и OnDestory.

Диаграмма жизненного цикла MonoBehavior

Далее поместите диаграмму жизненного цикла, нарисованную иностранным другом.

onenable unity что это. Смотреть фото onenable unity что это. Смотреть картинку onenable unity что это. Картинка про onenable unity что это. Фото onenable unity что это

Порядок выполнения скрипта

При разработке игр неизбежно будет использоваться множество скриптов, так как же определить порядок вызова между разными скриптами?

Добавьте приведенный выше код в сценарии Test1, Test2 и Test3 по очереди (измените распечатанный журнал соответствующим образом) и установите их на различные игровые объекты.
Порядок установки: сначала смонтировать Test3, затем Test2 и, наконец, Test1.
Результат печати показан на рисунке ниже.
onenable unity что это. Смотреть фото onenable unity что это. Смотреть картинку onenable unity что это. Картинка про onenable unity что это. Фото onenable unity что это

Результатом печати будет печать сначала Test1, затем Test2 и, наконец, Test3.
Фактически, порядок выполнения скрипта связан с порядком подключения к игровому объекту. Первый, который будет смонтирован, выполняется последним, а последний, который будет смонтирован, выполняется первым (если читатели сомневаются, вы можете постоянно настраивать порядок монтирования скрипта, чтобы видеть, соответствует ли печать журнала приведенному выше заключению).

Следует отметить, что независимо от порядка выполнения нескольких сценариев, функция Awake всех сценариев будет выполняться перед всеми функциями запуска, и все функции запуска также должны выполняться перед всеми функциями обновления. Функция жизненного цикла аналогична (вы также можете увидеть информацию журнала на приведенном выше рисунке).

Заказ индивидуального исполнения

onenable unity что это. Смотреть фото onenable unity что это. Смотреть картинку onenable unity что это. Картинка про onenable unity что это. Фото onenable unity что это

Нажмите «+», чтобы добавить скрипт, установите для него значение заказа, чем меньше значение заказа, первое выполнение, чем больше значение заказа, тем позже выполнение

Источник

Русские Блоги

Жизненный цикл Unity и обучение Unity (обновлено)

Один, жизненный цикл Unity

Жизненный цикл относится к рождению, старению, болезни и смерти объекта, и его основное значение может быть понято как весь процесс «от колыбели до могилы» (Cradle-to-Grave).

Жизненный цикл в Unity можно понимать как временную последовательность, в которой вызываются скрипты.

Примерно последовательность вызовов такова:
Awake () вызывается при загрузке экземпляра скрипта.
OnEnable () вызывается, когда объект становится доступным или активируется
Start () вызывается только перед первым вызовом функции Update.
FixedUpdate () Вызов фиксированного времени, по умолчанию 0,02 секунды (можно изменить)
Update () вызывается каждый кадр
LateUpdate () вызывается после каждого кадра
OnGUI () Вызывается при рисовании графического интерфейса пользователя (рендеринг) (обычно не используется, слишком ресурсоемко)
Reset () запускается, когда скрипт прикреплен или нажимается Reset
OnDisable () вызывается, когда скрипт недоступен
OnDestroy () вызывается при уничтожении скрипта.

onenable unity что это. Смотреть фото onenable unity что это. Смотреть картинку onenable unity что это. Картинка про onenable unity что это. Фото onenable unity что это

1.Awake()

Это первый выполняемый метод, который является началом жизненного цикла Unity. Пробуждение используется для инициализации переменных или состояния игры перед началом игры. Он вызывается только один раз в течение всего жизненного цикла скрипта.Awake вызывается после инициализации всех объектов, поэтому вы можете безопасно общаться с другими объектами или искать их с помощью таких функций, как GameObject.FindWithTag (). Пробуждение на каждом игровом объекте вызывается в случайном порядке. Awake следует использовать для установки ссылок между скриптами и использовать Start для передачи информации. Awake всегда вызывается перед Start.

2.OnEnable()

Эта функция определяет, может ли текущее состояние сценария продолжить выполнение, если enable = true для продолжения выполнения, enable = false не может быть выполнен, но вы можете продолжить выполнение enable = true в других сценариях.

3.Start()

Он вызывается только перед первым вызовом функции обновления. Старт вызывается только один раз в жизненном цикле поведения. Разница между ним и Awake в том, что Start вызывается только при включении экземпляра скрипта. При необходимости код отложенной инициализации можно изменить. Пробуждение всегда выполняется перед запуском, что позволяет согласовать последовательность инициализации. Во всех экземплярах скрипта функция Start всегда вызывается после функции Awake.

4.FixedUpdate()

Обновление фиксированного кадра, то есть вызов несколько раз за кадр, вызов фиксированное количество раз в секунду, по умолчанию 60 кадров в секунду, поэтому частота обновления по умолчанию составляет 0,02 с. В строке меню навигации Unity в пункте меню «Правка»> «Настройки проекта»> «Время» в представлении «Инспектор» справа появится диспетчер времени. Параметр «Фиксированный шаг времени» используется для установки частоты обновления FixedUpdate (). По умолчанию частота обновления составляет 0,02 с. Вы можете добавить движение, связанное с FixedUpdate, чтобы обеспечить плавное движение.
Например, игра устанавливает FPS на 60 и выполняет 60 раз в секунду, но при низкой производительности игры FPS становится 30, а FixedUpdate по-прежнему выполняется 60 раз, что эквивалентно 2 раз за кадр.
Update и LateUpdate определяются в зависимости от производительности и выполняются 30 раз в секунду.

5.Update()
6.LateUpdate()

Он вызывается после вызова всех функций Update.Как и fixedupdate, он вызывается и выполняется каждый кадр, что можно использовать для настройки порядка выполнения скрипта. Например: когда объект перемещается в Обновлении, камера, которая следует за объектом, может быть реализована в LateUpdate. После завершения всех операций обновления следите за камерой, в противном случае может показаться, что камера продвинулась вперед, но в угле обзора нет пустого кадра персонажа. появляются. LateUpdate вызывается после выполнения каждого кадра Update. Он вызывается после завершения всех обновлений. Он больше подходит для выполнения командных сценариев.

7.OnGUI()

При рендеринге и обработке графического интерфейса 1 Вызывается при событии, он также выполняется один раз за кадр. Например: его часто используют при рисовании кнопки или метки.

8.Reset()

Вызывается, когда пользователь нажимает кнопку «Сброс» инспектора или когда компонент добавляется впервые. Эта функция вызывается только в режиме редактирования. Сброс чаще всего используется для присвоения инспектору значения по умолчанию. Если Reset записывается после LateUpdate, он снова вернется в Update и может течь в цикле.

9.OnDisable()

OnDisable будет вызываться при уничтожении объекта и может использоваться для произвольного кода очистки. Когда скрипт выгружается, будет вызываться OnDisable, а OnEnable будет вызываться после загрузки скрипта.

10.OnDestroy()

Вызывается, когда MonoBehaviour будет уничтожен. OnDestroy будет вызываться только для игровых объектов, которые были активированы заранее.

Во-вторых, обучение Unity

1. Когда создается объект коллекции, создается объект вознаграждения, который отличается от общего объекта, и bool isReward записывается в методе создания объекта коллекции.
При вызове, если есть 20% вероятность создания объекта вознаграждения, выражение будет Random.Range (0,100) «Ввод»> «Отправить».

GUI: Графический интерфейс пользователя (сокращенно GUI, также известный как графический интерфейс пользователя) относится к пользовательскому интерфейсу, работающему на компьютере, который отображается графически. Это формат отображения интерфейса для связи между людьми и компьютерами, позволяющий пользователям использовать устройства ввода, такие как мышь, для управления значками или параметрами меню на экране, чтобы выбирать команды, вызывать файлы, запускать программы или выполнять другие повседневные задачи.↩︎

Источник

Порядок выполнения функций событий

В скриптинге Unity есть некоторое количество функций события, которые исполняются в заранее заданном порядке по мере исполнения скрипта. Этот порядок исполнения описан ниже:

Редактор

Первая загрузка сцены

Эти функции вызываются при запуске сцены (один раз для каждого объекта на сцене).

Учтите, что для объектов, добавленных в сцену сразу, функции Awake и OnEnable для всех скриптов будут вызваны до вызова Start, Update и т.д. Естественно, для объектов вызванных во время игрового процесса такого не будет.

Перед первым обновлением кадра

Для объектов добавленных на сцену, функция Start будет вызываться во всех скриптах до функции Update. Естественно, это не может быть обеспечено при создании объекта непосредственно во время игры.

Между кадрами

Порядок обновления

Update: Update вызывается раз за кадр. Это главная функция для обновлений кадров.

Рендеринг

Сопрограммы

Нормальные обновления сопрограмм запускаются после завершения из функции Update. Сопрограмма это функция, которая приостанавливает своё исполнение (yield), пока данные YieldInstruction не завершатся. Разные способы использования сопрограмм:

Когда объект разрушается

При выходе

Эти функции вызываются во всех активных объектах в вашей сцене:

Блок-схема жизненного цикла скрипта

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

Источник

Система сообщений или “мягкая связь” между компонентами для Unity3D

Введение

В данной статье будут затронуты темы, связанные с реализацией возможности “мягкой связи” компонентов игровой логики на основе системы сообщений при разработке игр на Unity3D.

Ни для кого не секрет, что в подавляющем большинстве случаев средств, которые предоставляет движок в базовом виде, недостаточно для полноценной реализации систем обмена данными между компонентами игры. В самом примитивном варианте, с которого все начинают, мы получаем информацию через экземпляр объекта. Получить этот экземпляр можно разными способами от ссылки на объект сцены, до функций Find. Это не удобно, делает код не гибким и заставляет программиста предусматривать множество нестандартных поведений логики: от “объект исчез из сцены”, до “объект не активен”. Помимо прочего может страдать и скорость работы написанного кода.

Прежде, чем приступить к рассмотрению способов решения проблемы, остановимся подробнее на ее предпосылках и базовых терминах, которые будут упомянуты ниже. Начнем с того, что подразумевается под “мягкой связью”. В данной случае — это обмен данными между компонентами игровой логики таким образом, чтобы эти компоненты абсолютно ничего не знали друг о друге. Исходя из этого, любые ссылки на объекты сцены или же поиск объекта в сцене по имени или типу дают нам “жесткую связь”. Если эти связи начнут выстраиваться в цепочки, то в случае необходимости изменения поведения логики программисту придется все перенастраивать заново. Как не сложно догадаться, гибкостью здесь и не пахнет. Конечно, можно написать расширение редактора, которое будет автоматически заполнять ссылки, но это не решит другую проблему – покомпонентное тестирование игровой логики.

Остановимся более подробно на базовом принципе реализации “мягкой связи”. Как было сказано выше, чтобы “мягко” связать два компонента, мы должны передать данные от одного к другому, так, чтобы они не знали ничего друг о друге. Для того, чтобы это обеспечить, нам нужно получить данные не по запросу (имея на руках экземпляр объекта), а использовать механизм уведомлений. Фактически это означает, что при наступлении каких-либо событий в объекте/компоненте, мы не спрашиваем этот объект о его состоянии, объект сам уведомляет о том, что в нем произошли изменения. Набор таких уведомлений формирует интерфейс (не путать с interface в C#), с помощью которого игровая логика получает данные о нашем объекте. Наглядно это можно представить следующим образом:

onenable unity что это. Смотреть фото onenable unity что это. Смотреть картинку onenable unity что это. Картинка про onenable unity что это. Фото onenable unity что это

Таким образом любой компонент системы через интерфейс уведомлений может получить необходимые данные об объекте игровой логике, при этом наличие самого объекта для тестирования связанных с ним компонентов необязательно, нам достаточно реализовать интерфейс, а затем подменить его на рабочий экземпляр.

Рассмотрим более подробно способы реализации описанного выше механизма, а также их плюсы и минусы.

Система сообщений на основе UnityEvents/UnityAction

Данная система появилось сравнительно недавно (в 5 версии движка Unity3D). Пример того, как реализовать простую систему сообщений можно посмотреть по этой ссылке.

Плюсы использования данного способа:

Классическая система C# на Event/Delegate

Самый простой и достаточно эффективный способ реализации связи компонентов на основе уведомлений — это использование пары event/delegate, которая является частью языка C# (подробнее можно почитать в статьях на habr’е или msdn).

Есть много разных вариантов реализации системы сообщений на основе event/delegate, некоторые из них можно найти на просторах интернета. Я приведу пример, на мой взгляд, наиболее удобной системы, однако для начала хочу упомянуть об одной важной детали, связанной с использованием event’ов. Если у события (event) нет подписчиков, то при вызове этого события произойдет ошибка, поэтому перед использованием обязательна проверка на null. Это не совсем удобно. Конечно можно написать обертку для каждого event, где будет проводиться проверка на null, но это еще более не удобно. Перейдем к реализации.

Как видно из примера, подписка происходит в методе OnEnable, а отписка в OnDisable и в данном случае она обязательна, иначе гарантирована утечка памяти и исключения по нулевой ссылке (null reference exception), если объект будет удален из игры. Саму подписку можно осуществлять в любой необходимый момент времени, это не обязательно делать только в OnEnable.

Легко заметить, что при таком подходе, мы можем без каких-либо проблем тестировать работу класса GUILogic, даже в отсутствии реальной логики GameLogicObject. Достаточно написать имитатор, использующий интерфейс уведомлений и использовать вызовы вида GameLogicObject.StartEvent ().

Какие плюсы дает нам данная реализация:

Reflection система сообщений с идентификаций на string

Прежде чем приступить к описанию системы и ее реализации, хотелось бы остановиться на предпосылках, которые толкнули на ее создание. До прихода к этим мыслям в своих приложениях я использовал описанную выше систему на основе event/delegate. Те проекты, которые мне пришлось разрабатывать на тот момент, были относительно простые, в них требовалась скорость реализации, минимум багов на тестах, исключение по максимуму человеческого фактора в фазе разработки игровой логики. Исходя из этого, родился ряд некоторых требований относительно обмена данными между компонентами:

GlobalMessanger.MessageHandler – атрибут, который указывает нам, что метод является обработчиком события. Для того, чтобы определить тип события, которое данный метод обрабатывает, существует два способа (хотя на самом деле может быть и больше):

Как видно, данная обертка содержит в себе два метода, которые позволяют подписываться и отписываться от события (тип события забирается из имени метода). Они необходимы в случае, если нам нужно осуществить подписку на событие по ходу работы логики. Автоматическая подписка осуществляется в методе Awake. Отписка от событий осуществляется автоматически, но об этом чуть позже.

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

Как видно, при вызове события происходит проверка на существование объекта и на активность объекта. В первом случае, удаленный объект убирается из подписчиков, во втором же игнорируется при вызове методов обработки события. Таким образом, следить за отпиской событий у удаленного объекта не требуется, все осуществляется автоматически. При этом, если объект был временно деактивирован, то не осуществляется отписка от событий и повторная подписка, а также при вызове наличие подписчиков на событие не обязательно.

Легко заметить, что описанная выше система не представляет из себя ничего сверхординарного и не несет в себе откровений, однако она проста и удобна и хорошо подходит для относительно небольших проектов.

Думаю, сразу заметно насколько сократился код по сравнению с event/delegate, что меня лично радует.

Какие плюсы дает нам данная реализация:

Reflection система сообщений с идентификаций на типах данных

В предыдущем разделе была описана система более удобная (на мой взгляд) по сравнению с event/delegate, однако она все также имеет ряд недостатков, которые сильно влияют на гибкость нашего кода, поэтому следующим шагом было ее развитие с учетом этих факторов.

Итак, нам нужно сохранить все плюсы предыдущей системы, но сделать ее гибче и более устойчивой к возможным изменениям в игровой логике. Поскольку основная проблема — это изменения имени события и передаваемых параметров, то возникла идея идентифицировать события именно по ним. Фактически это означает, что любое событие, которое возникает в компоненте характеризуется ничем иным, как данными, которые оно передает. Поскольку мы не можем просто привязаться к стандартным типам (int, float и т.п.), потому что в логике такие данные могут передавать многие компоненты, то логичным шагом было сделать обертку над ними, которая была бы удобной, легко читаемой и однозначно интерпретирующей событие.

Как видно, у событий появились атрибуты. Это дает нам возможность получить отладочную информацию, в случае, если событие требует подписчика, а в коде его по каким-то причинам нет.

Метод вызова событий Call (и его перегрузки), который ранее у нас был частью класса GlobalMessanger, теперь является статическим и находится в GEvents.BaseEvent и принимает теперь в качестве параметра экземпляр класса, описывающего тип события.

Подписка и отписка на события, осуществляется тем же самым способом, что и ранее, через атрибуты методов, однако теперь идентификация типа события происходит не по строковому значению (имя метода или параметр атрибута), а по типу параметра метода (в примере это классы StartEvent, ChangeHealthEvent и DeathEvent).

Таким образом, используя описанную выше реализацию, мы получили максимально возможную гибкость в коде, поскольку теперь мы можем как угодно менять передаваемые данные в событиях без значительных затрат, нам достаточно изменить тело обработчика под новые параметры. В случае же, если мы захотим изменить имя события (имя класса), компилятор скажет нам в каких местах кода используется старый вариант. При этом необходимость менять имя метода обработчика полностью отпадает.

Я постарался описать в этой статье все возможные на мой субъективный взгляд способы построения систем обмена данными между компонентами на основе уведомлений. Все эти способы были использованы мной в разных проектах и разной сложности: от простых мобильных проектов, до сложных PC. Какую систему использовать в вашем проекте – решать только вам.

PS: я намеренно не стал описывать в статье построение системы сообщения на основе SendMessage-функций, поскольку по сравнению с остальными она не выдерживает критики не только по удобству, но и по скорости работы.

Источник

Order of execution for event functions

Running a Unity script executes a number of event functions in a predetermined order. This page describes those event functions and explains how they fit into the execution sequence.

Script lifecycle overview

The diagram below summarizes how Unity orders and repeats event functions over a script’s lifetime.

For more information about the various event functions, see the following sections:

Script lifecycle flowchart

onenable unity что это. Смотреть фото onenable unity что это. Смотреть картинку onenable unity что это. Картинка про onenable unity что это. Фото onenable unity что это

Note: Some browsers do not support SVG image files. If the image above does not display properly (for example, if you cannot see any text), please try another browser, such as Google Chrome or Mozilla Firefox.

First Scene load

These functions get called when a scene A Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info
See in Glossary starts (once for each object in the scene).

Note that for objects added to the scene, the Awake and OnEnable functions for all scripts A piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input in any way you like. More info
See in Glossary will be called before Start, Update, etc are called for any of them. Naturally, this cannot be enforced when you instantiate an object during gameplay.

Editor

Before the first frame update

For objects that are part of a scene asset, the Start function is called on all scripts before Update, etc is called for any of them. Naturally, this cannot be enforced when you instantiate an object during gameplay.

In between frames

Update Order

When you’re keeping track of game logic and interactions, animations, camera A component which creates an image of a particular viewpoint in your scene. The output is either drawn to the screen or captured as a texture. More info
See in Glossary positions, etc., there are a few different events you can use. The common pattern is to perform most tasks inside the Update function, but there are also other functions you can use.

FixedUpdate: FixedUpdate is often called more frequently than Update. It can be called multiple times per frame, if the frame rate is low and it may not be called between frames at all if the frame rate is high. All physics calculations and updates occur immediately after FixedUpdate. When applying movement calculations inside FixedUpdate, you do not need to multiply your values by Time.deltaTime. This is because FixedUpdate is called on a reliable timer, independent of the frame rate.

Update: Update is called once per frame. It is the main workhorse function for frame updates.

LateUpdate: LateUpdate is called once per frame, after Update has finished. Any calculations that are performed in Update will have completed when LateUpdate begins. A common use for LateUpdate would be a following third-person camera. If you make your character move and turn inside Update, you can perform all camera movement and rotation calculations in LateUpdate. This will ensure that the character has moved completely before the camera tracks its position.

In general, you should not rely on the order in which the same event function is invoked for different GameObjects — except when the order is explicitly documented or settable. (If you need a more fine-grained control of the player loop, you can use the PlayerLoop API.)

You cannot specify the order in which an event function is called for different instances of the same MonoBehaviour subclass. For example, the Update function of one MonoBehaviour might be called before or after the Update function for the same MonoBehaviour on another GameObject — including its own parent or child GameObjects.

You can specify that the event functions of one MonoBehaviour subclass should be invoked before those of a different subclass (using the Script Execution Order panel of the Project Settings window). For example, if you had two scripts, EngineBehaviour and SteeringBehaviour, you could set the Script Execution Order such that EngineBehaviours always updates before SteeringBehaviours.

Animation update loop

These functions and Profiler A window that helps you to optimize your game. It shows how much time is spent in the various areas of your game. For example, it can report the percentage of time spent rendering, animating, or in your game logic. More info
See in Glossary Markers are called when Unity evaluates the Animation system.

OnStateMachineEnter: During the State Machine Update step, this callback is called on the first update frame when a controller’s state machine makes a transition that flows through an Entry state. It is not called for a transition to a StateMachine sub-state.

Note: Adding this callback to a StateMachineBehaviour component disables multithreaded state machine The set of states in an Animator Controller that a character or animated GameObject can be in, along with a set of transitions between those states and a variable to remember the current state. The states available will depend on the type of gameplay, but typical states include things like idling, walking, running and jumping. More info
See in Glossary evaluation.

OnStateMachineExit: During the State Machine Update step, this callback is called on the last update frame when a controller’s state machine makes a transition that flows through an Exit state. It is not called for a transition to a StateMachine sub-state.

Note: Adding this callback to a StateMachineBehaviour component disables multithreaded state machine evaluation.

Fire Animation Events Allows you to add data to an imported clip which determines when certain actions should occur in time with the animation. For example, for an animated character you might want to add events to walk and run cycles to indicate when the footstep sounds should play. More info
See in Glossary :
Calls all animation events from all clips sampled between the time of the last update and the time of the current update.

StateMachineBehaviour (OnStateEnter/OnStateUpdate/OnStateExit): A layer can have up to 3 active states: current state, interrupted state, and next state. This function is called for each active state with a StateMachineBehaviour component that defines the OnStateEnter, OnStateUpdate, or OnStateExit callback.

The function is called for the current state first, then the interrupted state, and finally the next state.

StateMachineBehaviour(OnStateMove): This is called on each active state with a StateMachineBehaviour that defines this callback.

OnAnimatorIK: Sets up animation IK. This is called once for each Animator Controller layer with IK pass enabled.

This event executes only if you are using a Humanoid rig.

StateMachineBehaviour(OnStateIK): This is called on each active state with a StateMachineBehaviour component that defines this callback on a layer with IK pass enabled.

WriteProperties: Writes all other animated properties to the Scene from the main thread.

Useful profile markers

Some of the animation functions shown in the Script Lifecycle Flowchart are not Event functions that you can call; they are internal functions called when Unity processes your animation.

For example, suppose you call Animator.Play in the FireAnimationEvents callback. If you know that the FireAnimationEvents callback is fired only after the State Machine Update and Process Graph functions execute, you can anticipate that your animation clip Animation data that can be used for animated characters or simple animations. It is a simple “unit” piece of motion, such as (one specific instance of) “Idle”, “Walk” or “Run”. More info
See in Glossary will play on the next frame, and not right away.

State Machine Update: All state machines are evaluated at this step in the execution sequence. This step occurs only if there is a controller component (for example, AnimatorController or AnimatorOverrideController or AnimatorControllerPlayable) in the animation graph.

Note: State machine evaluation is normally multithreaded, but adding certain callbacks (for example OnStateMachineEnter and OnStateMachineExit) disables multithreading. See Animation update loop above for details.

ProcessGraph: Evaluates all animation graphs. This includes sampling all animation clips that need to be evaluated, and computing Root Motion.

ProcessAnimation: Blends the results of the animation graph.

WriteTransforms: Writes all animated transforms to the scene from a worker thread.

A Humanoid rig with multiple layers that have IK pass enabled can have multiple WriteTransforms passes (See the Script Lifecycle Flowchart.

Rendering

Note: These callbacks only work with the Built-in Render Pipeline.

Coroutines

Normal coroutine updates are run after the Update function returns. A coroutine is a function that can suspend its execution (yield) until the given YieldInstruction finishes. Different uses of Coroutines:

When the Object is destroyed

When quitting

These functions get called on all the active objects in your scene:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *