Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

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

Запуск скрипта Unity выполняет ряд функций обработки событий в заданном порядке. На этой странице описываются эти функции событий и объясняется, как они вписываются в последовательность выполнения.

Обзор жизненного цикла скрипта

На диаграмме ниже показано, как Unity упорядочивает и повторяет функции событий на протяжении всего срока действия скрипта.

Дополнительную информацию о различных функциях событий см. в следующих разделах:

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

Примечание. Некоторые браузеры не поддерживают файлы изображений SVG. Если изображение выше не отображается должным образом (например, если вы не видите текста), попробуйте другой браузер, например Google Chrome или Mozilla Firefox.

Загрузка первой сцены

Эти функции вызываются, когда сценаСцена содержит среду и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
Просмотреть в начале Словарь
(один раз для каждого объекта в сцене).

  • Пробуждение: эта функция всегда вызывается перед любыми функциями запуска, а также сразу после префабатипа ресурса что позволяет хранить GameObject вместе с компонентами и свойствами. Префаб действует как шаблон, из которого вы можете создавать новые экземпляры объектов на сцене. Подробнее
    See in Словарь
    . (Если GameObject неактивен во время запуска, Awake не вызывается, пока он не станет активным.)
  • OnEnable: (вызывается, только если объект активен): эта функция вызывается сразу после включения объекта. Это происходит при создании экземпляра MonoBehaviour, например при загрузке уровня или GameObjectфундаментального объекта в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
    См. в Словарь
    с созданием экземпляра компонента скрипта.

Обратите внимание, что для объектов, добавленных в сцену, функции Awake и OnEnable для всех скриптов Фрагмент кода, который позволяет вам создавать свои собственные Компоненты, запускать игровые события, изменять свойства Компонентов с течением времени и реагировать на ввод данных пользователем любым удобным для вас способом. Подробнее
См. Словарь
будет вызываться до запуска, обновления и т. д. для любого из них. Естественно, это нельзя применить, когда вы создаете экземпляр объекта во время игры.

Редактор

  • Сброс: Сброс вызывается для инициализации свойств скрипта при первом присоединении к объекту, а также при использовании команды Сброс.
  • OnValidate: OnValidate вызывается всякий раз, когда устанавливаются свойства сценария, в том числе при десериализации объекта, что может происходить в разное время, например при открытии сцены в редакторе и после перезагрузки домена.< /li>

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

  • Start: Start вызывается перед обновлением первого кадра, только если включен экземпляр скрипта.

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

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

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

Обновить заказ

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

  • FixedUpdate: FixedUpdate часто вызывается чаще, чем Update. Его можно вызывать несколько раз за кадр, если частота кадров низкая, и его можно вообще не вызывать между кадрами, если частота кадров высока. Все физические расчеты и обновления происходят сразу после FixedUpdate. При применении вычислений движения внутри FixedUpdate вам не нужно умножать ваши значения на Time.deltaTime. Это связано с тем, что FixedUpdate вызывается по надежному таймеру, независимому от частоты кадров.

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

  • LateUpdate: LateUpdate вызывается один раз для каждого кадра после завершения Update. Любые вычисления, выполняемые в Update, будут завершены, когда начнется LateUpdate. Обычно для LateUpdate используется следующая камера от третьего лица. Если вы заставляете своего персонажа двигаться и поворачиваться внутри Update, вы можете выполнять все расчеты движения и поворота камеры в LateUpdate. Это гарантирует, что персонаж полностью переместится до того, как камера отследит его положение.

В целом не следует полагаться на порядок, в котором одна и та же функция события вызывается для разных игровых объектов, за исключением случаев, когда порядок явно задокументирован или может быть установлен. (Если вам нужно более точное управление циклом воспроизведения, вы можете использовать API PlayerLoop.)

Вы не можете указать порядок, в котором функция события вызывается для разных экземпляров одного и того же подкласса MonoBehaviour. Например, функция Update одного MonoBehaviour может быть вызвана до или после функции Update для того же MonoBehaviour в другом GameObject, включая его собственный родительский или дочерний GameObject.

Вы можете указать, что функции событий одного подкласса MonoBehaviour должны вызываться перед функциями другого подкласса (используя панель «Порядок выполнения сценариев» в окне «Настройки проекта»). Например, если у вас есть два сценария, EngineBehaviour и SteeringBehaviour, вы можете установить порядок выполнения скриптов таким образом, чтобы EngineBehaviours всегда обновлялся перед SteeringBehaviours.

Цикл обновления анимации

Эти функции и Profilerокно помогут вам оптимизировать игру. Он показывает, сколько времени вы тратите на различные области вашей игры. Например, он может сообщать о проценте времени, затраченном на рендеринг, анимацию или игровую логику. Подробнее
См. в Словарь
Маркеры вызываются, когда Unity оценивает систему анимации.

  • OnStateMachineEnter: во время этапа Обновление конечного автомата этот обратный вызов вызывается в первом кадре обновления, когда конечный автомат контроллера совершает переход, который проходит через состояние входа. Он не вызывается для перехода в подсостояние StateMachine.

    Этот обратный вызов выполняется только при наличии компонента контроллера (например, AnimatorController или AnimatorOverrideController или AnimatorControllerPlayable) в график анимации.

    Примечание. Добавление этого обратного вызова к компоненту StateMachineBehaviour отключает многопоточность. машина состоянийНабор состояний в Animator Controller, в которых может находиться персонаж или анимированный игровой объект, а также набор переходов между ними. эти состояния и переменная для запоминания текущего состояния. Доступные состояния будут зависеть от типа игрового процесса, но типичные состояния включают в себя такие вещи, как бездействие, ходьба, бег и прыжки. Подробнее
    См. в оценке Словарь
    .

  • OnStateMachineExit: во время этапа Обновление конечного автомата этот обратный вызов вызывается в последнем кадре обновления, когда конечный автомат контроллера совершает переход, который проходит через состояние выхода. Он не вызывается для перехода в подсостояние StateMachine.

    Этот обратный вызов выполняется только при наличии компонента контроллера (например, AnimatorController или AnimatorOverrideController или AnimatorControllerPlayable) в график анимации.

    Примечание. Добавление этого обратного вызова к компоненту StateMachineBehaviour отключает многопоточную оценку конечного автомата.

  • Активировать События анимацииПозволяет добавлять в импортированный клип данные, которые определяют, когда определенные действия должны выполняться одновременно с анимацией. . Например, для анимированного персонажа вы можете добавить события в циклы ходьбы и бега, чтобы указать, когда должны воспроизводиться звуки шагов. Подробнее
    См. в Словарь
    :
    вызывает все события анимации из всех выбранных клипов. между временем последнего обновления и временем текущего обновления.

  • StateMachineBehaviour (OnStateEnter/OnStateUpdate/OnStateExit): уровень может иметь до 3 активных состояний: текущее состояние, прерванное состояние и следующее состояние. Эта функция вызывается для каждого активного состояния с компонентом StateMachineBehaviour, который определяет обратный вызов OnStateEnter, OnStateUpdate или OnStateExit.

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

    Этот шаг выполняется только при наличии компонента контроллера (например, AnimatorController или AnimatorOverrideController или AnimatorControllerPlayable) в график анимации..

  • OnAnimatorMove: каждый кадр обновления вызывается один раз для каждого компонента Animatorкомпонента модели, который анимирует эту модель с помощью системы анимации. Компонент имеет ссылку на ресурс Animator Controller, который управляет анимацией. Подробнее
    См. в Словарь
    , чтобы изменить Корневое движениеДвижение корневого узла персонажа, независимо от того, контролируется ли оно самой анимацией или внешними средствами. Подробнее
    См. в Словарь
    .

  • StateMachineBehaviour(OnStateMove): вызывается для каждого активного состояния с StateMachineBehaviour, определяющим этот обратный вызов. .

  • OnAnimatorIK: настраивает IK анимации. Это вызывается один раз для каждого слоя Animator Controller с включенным проходом IK.

    Это событие выполняется, только если вы используете установку Humanoid.

  • StateMachineBehaviour(OnStateIK): вызывается для каждого активного состояния с компонентом StateMachineBehaviour, определяющим это обратный вызов для слоя с включенным проходом IK.

  • WriteProperties: записывает все остальные анимированные свойства в сцену из основного потока.

Полезные маркеры профиля

Некоторые функции анимации, показанные на блок-схеме жизненного цикла сценария, не являются функциями события, которые вы можете вызывать; это внутренние функции, которые вызываются, когда Unity обрабатывает вашу анимацию.

Эти функции имеют Маркеры профилировщикаПомещенные в код для описания события CPU или GPU, которое затем отображается в окне Unity Profiler. . Добавляется в код Unity по умолчанию, или вы можете использовать ProfilerMarker API для добавления собственных маркеров. Подробнее
См. в Словарь
, чтобы можно было использовать Profiler, чтобы увидеть, когда в кадре их вызывает Unity. Знание того, когда Unity вызывает эти функции, может помочь вам понять, когда именно выполняются функции Event, которые вы вызываете.

Например, предположим, что вы вызываете Animator.Play в обратном вызове FireAnimationEvents. Если вы знаете, что обратный вызов FireAnimationEvents запускается только после выполнения функций State Machine Update и Process Graph, вы можете ожидать, что ваш анимационный клипАнимационные данные, которые можно использовать для анимированных персонажей или простых анимаций. Это простое «единичное» движение, такое как (один конкретный пример) «Простояние», «Ходьба» или «Бег». Подробнее
См. в Словарь
будет воспроизводиться в следующем кадре, а не сразу.

  • Обновление конечного автомата: все конечные автоматы оцениваются на этом этапе последовательности выполнения. Этот шаг выполняется только при наличии компонента контроллера (например, AnimatorController или AnimatorOverrideController или AnimatorControllerPlayable) в графе анимации .

    Примечание. Оценка конечного автомата обычно многопоточная, но добавление определенных обратных вызовов (например, OnStateMachineEnter и OnStateMachineExit) отключает многопоточность. Дополнительные сведения см. в разделе Цикл обновления анимации выше.

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

  • ProcessAnimation: смешивает результаты анимации.

  • WriteTransforms: записывает все анимированные преобразования в сцену из рабочего потока.

    У рига Humanoid с несколькими слоями, для которых включен IK pass, может быть несколько проходов WriteTransforms (см. блок-схему жизненного цикла скрипта.

Визуализация

  • OnPreCull: вызывается до того, как камера отсечет сцену. Culling определяет, какие объекты видны камере. OnPreCull вызывается непосредственно перед отбраковкой.
  • OnBecameVisible/OnBecameInvisible: вызывается, когда объект становится видимым/невидимым для любой камеры.
  • OnWillRenderObject: вызывается один раз для каждой камеры, если объект виден.
  • OnPreRender: вызывается до того, как камера начнет визуализацию сцены.
  • OnRenderObject: вызывается после завершения обычного рендеринга сцены. Вы можете использовать класс GL или Graphics.DrawMeshNow для рисования пользовательской геометрии в этот момент.
  • OnPostRender: вызывается после того, как камера заканчивает визуализацию сцены.
  • OnRenderImage: вызывается после завершения рендеринга сцены, чтобы разрешить постобработкупроцесс, который улучшает визуальные эффекты продукта за счет применение фильтров и эффектов до того, как изображение появится на экране. Вы можете использовать эффекты постобработки для имитации физических свойств камеры и пленки, например Bloom и Depth of Field. Дополнительная информация постобработка, постобработка, постобработка
    См. в Словарь
    изображения, см. Эффекты постобработки.
  • OnGUI: вызывается несколько раз за кадр в ответ на события графического интерфейса. Сначала обрабатываются события Layout и Repaint, за которыми следуют события Layout и клавиатуры/мыши для каждого события ввода.
  • OnDrawGizmos Используется для рисования Gizmosграфического наложения, связанного с GameObject в сцене и отображаемого в Просмотр сцены. Встроенные инструменты сцены, такие как инструмент перемещения, представляют собой гизмо, и вы можете создавать собственные гизмо, используя текстуры или сценарии. Некоторые гизмо отрисовываются только при выборе игрового объекта, в то время как другие гизмо отрисовываются редактором независимо от того, какие игровые объекты выбраны. Подробнее
    См. в Словарь
    в вид сценыИнтерактивный вид мира, который вы создаете. Вы используете Scene View для выбора и размещения пейзажей, персонажей, камер, источников света и всех других типов игровых объектов. Подробнее
    См. в Словарь
    для наглядности.

Примечание. Эти обратные вызовы работают только со встроенным конвейером рендеринга.

Сопрограммы

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

  • yield Сопрограмма продолжит работу после того, как все функции обновления будут вызваны в следующем кадре.
  • yield WaitForSeconds Продолжить после указанной временной задержки, после того как для кадра будут вызваны все функции обновления.
  • yield WaitForFixedUpdate Продолжить после того, как все FixedUpdate будут вызваны для всех сценариев. Если сопрограмма завершилась до FixedUpdate, она возобновится после FixedUpdate в текущем кадре.
  • yield WWW Продолжить после завершения загрузки WWW.
  • yield StartCoroutine Связывает сопрограмму и ожидает завершения сопрограммы MyFunc.

Когда Объект уничтожен

  • OnDestroy: эта функция вызывается после всех обновлений кадров для последнего кадра существования объекта (объект может быть уничтожен в ответ на команду Object.Destroy или при закрытии сцены).

При выходе

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

  • OnApplicationQuit: эта функция вызывается для всех игровых объектов перед выходом из приложения. В редакторе он вызывается, когда пользователь останавливает режим воспроизведения.
  • OnDisable: эта функция вызывается, когда поведение становится отключенным или неактивным.
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3