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 | 当过渡到 StateMachine 时,在第一个 Update 帧上进行调用。当过渡到 StateMachine 子状态时,不进行调用。 |
OnStateMachineExit | 当转出 StateMachine 时,在最后一个 Update 帧上进行调用。当过渡到 StateMachine 子状态时,不进行调用。 |
OnStateEnter | 当状态机评估此状态时,在第一个 Update 帧上进行调用。 |
OnStateExit | 当状态机评估此状态时,在最后一个 Update 帧上进行调用。 |
OnStateIK | 刚好在 MonoBehaviour.OnAnimatorIK 后调用。 |
OnStateMove | 刚好在 MonoBehaviour.OnAnimatorMove 后调用。 |
OnStateUpdate | 除第一帧和最后一帧外,在每个 Update 帧上进行调用。 |
GetInstanceID | 返回对象的实例 ID。 |
ToString | Returns the name of the game object. |
Destroy | 删除 GameObject、组件或资源。 |
DestroyImmediate | 立即销毁对象 /obj/。强烈建议您改用 Destroy。 |
DontDestroyOnLoad | 加载新场景时,不自动销毁对象 /target/。 |
FindObjectOfType | 返回第一个类型为 type 的已加载的激活对象。 |
FindObjectsOfType | 返回所有类型为 type 的已加载的激活对象的列表。 |
Instantiate | 克隆 original 对象并返回克隆对象。 |
CreateInstance | 创建脚本化对象的实例。 |
bool | 该对象是否存在? |
operator != | 比较两个对象是否引用不同的对象。 |
operator == | 比较两个对象引用,判断它们是否引用同一个对象。 |