StateMachineBehaviour 是一个可添加到状态机状态的组件。它是一个基类,所有状态脚本都派生自该类。
默认情况下,Animator 不实例化控制器中定义的每个行为的新实例。类属性 SharedBetweenAnimatorsAttribute 控制实例化行为的方式。
StateMachineBehaviour 具有一些预定义消息:
OnStateEnter、OnStateExit、OnStateIK、OnStateMove、OnStateUpdate。
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 | 当过渡到状态机时,在第一个 Update 帧上进行调用。当过渡到状态机子状态时,不进行调用。 |
OnStateMachineExit | 当转出 StateMachine 时,在最后一个 Update 帧上进行调用。当过渡到 StateMachine 子状态时,不进行调用。 |
OnStateEnter | 当状态机评估此状态时,在第一个 Update 帧上进行调用。 |
OnStateExit | 当状态机评估此状态时,在最后一个 Update 帧上进行调用。 |
OnStateIK | 刚好在 MonoBehaviour.OnAnimatorIK 后调用。 |
OnStateMove | 刚好在 MonoBehaviour.OnAnimatorMove 后调用。 |
OnStateUpdate | 除第一帧和最后一帧外,在每个 Update 帧上进行调用。 |
GetInstanceID | 返回对象的实例 ID。 |
ToString | 返回对象的名称。 |
Destroy | 移除 GameObject、组件或资源。 |
DestroyImmediate | 立即销毁对象 /obj/。强烈建议您改用 Destroy。 |
DontDestroyOnLoad | 在加载新的 Scene 时,请勿销毁 Object。 |
FindObjectOfType | 返回第一个类型为 type 的已加载的激活对象。 |
FindObjectsOfType | Gets a list of all loaded objects of Type type. |
Instantiate | 克隆 original 对象并返回克隆对象。 |
CreateInstance | 创建脚本化对象的实例。 |
bool | 该对象是否存在? |
operator != | 比较两个对象是否引用不同的对象。 |
operator == | 比较两个对象引用,判断它们是否引用同一个对象。 |