状态机行为脚本
Contents
状态机行为脚本是什么?
- 状态机行为脚本时一类特殊的脚本,继承指定的基类
- 当进入、退出、保持在某一个特定状态时我们可以进行一些逻辑处理
- 利用这个脚本我们可以做一些特殊功能
- 比如进入或退出某一状态时播放声音,仅在某些状态下检测一些逻辑,比如是否接触地面等等
如何使用状态机脚本
- 新建一个脚本继承StateMachineBehaviour基类
- 实现其中的特定方法进行状态行为监听
- OnStateEnter 进入状态时,第一个Update中调用
- OnStateExit 退出状态时,最后一个Update中调用
- OnStateIK OnAnimatorIK后调用
- OnStateMove OnAnimatorMove后调用
- OnStateUpdate 除第一帧和最后一帧,每个Update上调用
- OnStateMachineEnter 子状态机进入时调用,第一个Update中调用
- OnStateMachineExit 子状态机退出时调用,最后一个Update中调用
public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
if( stateInfo.IsName(stateName) )
Debug.Log("进入HumanoidIdle状态");
}
public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
if (stateInfo.IsName("HumanoidIdle"))
Debug.Log("退出HumanoidIdle状态");
}
public override void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
base.OnStateIK(animator, stateInfo, layerIndex);
}
public override void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
base.OnStateMove(animator, stateInfo, layerIndex);
}
public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
base.OnStateUpdate(animator, stateInfo, layerIndex);
if (stateInfo.IsName("HumanoidIdle"))
Debug.Log("处于HumanoidIdle状态");
}
public override void OnStateMachineEnter(Animator animator, int stateMachinePathHash)
{
base.OnStateMachineEnter(animator, stateMachinePathHash);
}
public override void OnStateMachineExit(Animator animator, int stateMachinePathHash)
{
base.OnStateMachineExit(animator, stateMachinePathHash);
}