首页 > 解决方案 > unity动画触发检查

问题描述

当在 unity animator 中设置触发器时,并且状态机不在可以调用触发器的状态下,触发器被“充电”并会在它可以触发的那一刻触发。如何检查触发器是否已设置,如何取消选中?

标签: unity3danimationtriggers

解决方案


检查当前是否设置了某个触发器实际上比我想象的要难^^


但是,您可以使用 重置触发器Animator.ResetTrigger

正是为了避免您的问题,我曾经创建了一个脚本,该脚本在进入新状态时简单地重置所有触发器。

using System.Linq;
using UnityEngine;

public class ResetAllTriggers : StateMachineBehaviour
{
    public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        foreach (var parameter in animator.parameters.Where(parameter => parameter.type == AnimatorControllerParameterType.Trigger))
        {
            animator.ResetTrigger(parameter.name);
        }
    }
}

这确保在每个状态的开始,所有触发器都被重置 => 只有在当前状态期间实际设置的触发器才会被处理并且永远不会被存储以备后用。

为了不必将它附加到每个状态,您可以简单地将这个行为放到状态机的相应!然后在任何状态调用时简单地调用它OnStateEnter

单击 AnimatorController 中的相应图层,例如BaseLayer

在此处输入图像描述

然后单击Add Behaviour并添加重置行为

在此处输入图像描述

如您所见,现在每次进入新状态时都会重置触发器

在此处输入图像描述


推荐阅读