问题

在使用Animator动画机时

为了方便我会直接使用Trigger参数

虽然方便,但这样会有一个隐患发生

例如我想要进行翻滚动画时,我的按键操作按下了不止一次的触发

导致我只想要一次的翻滚,结果却翻滚了好几次,这显然是一个会经常出现的问题

解决思路

隆重介绍
特有函数 :

OnStateEnter()

OnStateExit()

从英文含义我们就可以知道,这个是在动画状态进入和离开时会触发的函数

那么我们的思路就是利用animator.ResetTrigger()来重置Trigger参数的触发

同时搭配foreach遍历,我们就可以轻松重置每一个Trigger参数啦

需要注意的是,该特有函数必须继承StateMachineBehaviour才能使用

代码部分

using UnityEngine;
public class FSMClearSignals : StateMachineBehaviour
{
public string[] clearAtEnter;
public string[] cleatAtExit;

override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
    foreach (var signal in clearAtEnter)
    {
        animator.ResetTrigger(signal);//重置trigger
    }
}

override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
    foreach (var signal in clearAtEnter)
    {
        animator.ResetTrigger(signal);//重置trigger
    }
}
}

使用方法

在任意动画中添加该脚本,并在数组中填写你想要清除的Trigger参数名即可
Trigger_01.png