Unity 6.3
0 онлайн 2 гостей 3 в системе
Вход

StateMachineBehaviour

класс в UnityEngine

Наследуется от:ScriptableObject

Выполнено в:UnityEngine.AnimationModule

Описание

StateMachineBehaviour — компонент, который добавляется к состоянию машины состояний. Это базовый класс, от которого должен наследоваться скрипт.

У машины состояний одновременно может быть до трёх активных состояний: текущее, следующее и прерванное.
У машины состояний всегда есть текущее состояние. Когда машина переходит в новое состояние, добавляется следующее состояние. По завершении перехода текущее состояние заканчивается, а следующее становится текущим.
Если текущий переход прерывается переходом в новое состояние, то следующее состояние становится прерванным, а состояние, в которое ведёт новый переход, — следующим. Текущее состояние остаётся прежним, пока не завершатся все прерванные переходы. Когда последний переход завершён и прерываний больше нет, текущее и прерванное состояния заканчиваются, а следующее становится текущим.

В StateMachineBehaviour есть предопределённые методы, связанные с состоянием, которые можно реализовать:OnStateEnter, OnStateExit, OnStateIK, OnStateMove, OnStateUpdate.
Эти методы вызываются для перечисленных выше активных состояний в следующем порядке: текущее состояние, затем прерванное, затем следующее.
Дополнительные сведения см. в описании каждого метода.

В StateMachineBehaviour есть также предопределённые методы, связанные с переходами в машины состояний и из них:
OnStateMachineEnter и OnStateMachineExit.
Эти методы вызываются при каждом переходе машины состояний.

Если AnimatorController содержит синхронизированные слои, метод может быть вызван несколько раз для одного и того же состояния. В этом случае метод вызывается по одному разу для каждого синхронизированного слоя с этим состоянием, в порядке возрастания.

По умолчанию Animator создает новый экземпляр каждого поведения, определенного в контроллере. Чтобы поделиться экземплярами поведения, используйте SharedBetweenAnimatorsAttribute атрибут класса, чтобы управлять созданием экземпляров поведений.

using UnityEngine;

public class AttackBehaviour : StateMachineBehaviour { public GameObject particle; public float radius; public float power;

protected GameObject clone;

override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { clone = Instantiate(particle, animator.rootPosition, Quaternion.identity) as GameObject; Rigidbody rb = clone.GetComponent<Rigidbody>(); rb.AddExplosionForce(power, animator.rootPosition, radius, 3.0f); }

override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Destroy(clone); }

override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Debug.Log("On Attack Update "); }

override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Debug.Log("On Attack Move "); }

override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Debug.Log("On Attack IK "); } }

Открытые методы

Метод Описание
OnStateMachineEnterВызывается в первом кадре обновления при переходе в машину состояний. Реализуйте это сообщение, чтобы повлиять на переход входа в подмашину состояний.
OnStateMachineExitВызывается на последнем кадре обновления при переходе из StateMachine. Реализуйте это сообщение, чтобы повлиять на выход из под-state машины

Сообщения

Сообщение Описание
OnStateEnterВызывается в первом кадре обновления, когда машина состояний вычисляет это состояние. Реализуйте это сообщение, чтобы отреагировать на вход в новое состояние.
OnStateExitВызывается в последнем кадре обновления, когда машина состояний вычисляет это состояние. Реализуйте это сообщение, чтобы отреагировать на завершение состояния.
OnStateIKВызывается во время прохода Animator IK. Реализуйте это сообщение, чтобы изменять результат анимации после вычисления машины состояний — отдельно для каждого состояния.
OnStateMoveВызывается во время прохода Animator Root Motion. Реализуйте это сообщение, чтобы изменять результат корневого движения анимации отдельно для каждого состояния.
OnStateUpdateВызывается в каждом кадре обновления, кроме первого и последнего. Реализуйте это сообщение, чтобы выполнять собственную логику отдельно для каждого состояния.
Унаследованные члены 5

Свойства

СвойствоОписание
hideFlagsДолжен ли объект быть скрытым, сохраняться с Scene или изменяться пользователем?
nameИмя объекта.

Открытые методы

МетодОписание
GetInstanceIDПолучает экземпляр ID объекта.
ToStringВозвращает имя объекта.

Статические методы

МетодОписание
DestroyУдаляет GameObject, компонент или ресурс.
DestroyImmediateНемедленно уничтожает указанный объект. Используйте с осторожностью и только в режиме редактирования.
DontDestroyOnLoadНе уничтожать целевой Объект при загрузке нового Scene.
FindAnyObjectByTypeПолучает любой активный загруженный объект типа Type.
FindFirstObjectByTypeПолучает первый активный загруженный объект типа Type.
FindObjectsByTypeПолучает список всех загруженных объектов типа Type.
InstantiateКлонирует исходный объект и возвращает клон.
InstantiateAsyncЗахватывает моментальный снимок первоначального объекта (который должен быть связан с каким-либо GameObject) и возвращает AsyncInstantiateOperation.
CreateInstanceСоздает экземпляр скриптового объекта.

Операторы

ОператорОписание
boolСуществует ли объект?
оператор!=Сравнивает, если два объекта ссылаются на разные объекты.
оператор ==Сравнение двух ссылок на объекты для определения того, относятся ли они к одному и тому же объекту.

Сообщения

СообщениеОписание
AwakeВызывается при создании экземпляра ScriptableObject.
OnDestroyЭта функция вызывается, когда скриптовый объект будет уничтожен.
OnDisableЭта функция вызывается, когда скриптовый объект выходит за пределы области действия.
OnEnableЭта функция вызывается при загрузке объекта.
OnValidateФункция только для редактора, которую вызывает Unity при загрузке скрипта или изменении значения в Inspector.
ResetСброс значений по умолчанию.