一、工程截图
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Animations; /// <summary> /// 状态机行为 /// 获取行为类对象: animator.GetBehaviour<statemachinebehaviourtest>() /// </summary> public class StateMachineBehaviourTest : StateMachineBehaviour { //进入当前状态 public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Debug.Log("OnStateEnter_0"); } public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex, AnimatorControllerPlayable controller) { Debug.Log("OnStateEnter_1"); } //离开当前状态 public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Debug.Log("OnStateExit_0"); } public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex, AnimatorControllerPlayable controller) { Debug.Log("OnStateExit_1"); } //在MonoBehaviour.OnAnimatorIK之后立即调用。 public override void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Debug.Log("OnStateIK_0"); } public override void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex, AnimatorControllerPlayable controller) { Debug.Log("OnStateIK_1"); } //过渡到状态机时在第一个Update帧上调用。过渡到状态机子状态时,不会调用此方法。 public override void OnStateMachineEnter(Animator animator, int stateMachinePathHash) { Debug.Log("OnStateMachineEnter_0"); } public override void OnStateMachineEnter(Animator animator, int stateMachinePathHash, AnimatorControllerPlayable controller) { Debug.Log("OnStateMachineEnter_1"); } //从StateMachine过渡出来时,调用最后一个Update帧。过渡到StateMachine子状态时,不会调用此方法。 public override void OnStateMachineExit(Animator animator, int stateMachinePathHash) { Debug.Log("OnStateMachineExit_0"); } public override void OnStateMachineExit(Animator animator, int stateMachinePathHash, AnimatorControllerPlayable controller) { Debug.Log("OnStateMachineExit_1"); } //在MonoBehaviour.OnAnimatorMove之后立即调用。 public override void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Debug.Log("OnStateMove_0"); } public override void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex, AnimatorControllerPlayable controller) { Debug.Log("OnStateMove_1"); } //在第一帧和最后一帧之外的每个更新帧中调用。 public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Debug.Log("OnStateUpdate_0"); } public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex, AnimatorControllerPlayable controller) { Debug.Log("OnStateUpdate__1"); } }
二、运行测试