StateMachineBehaviour
Описание
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 | Сброс значений по умолчанию. |