unity3d - unity动画触发检查
问题描述
当在 unity animator 中设置触发器时,并且状态机不在可以调用触发器的状态下,触发器被“充电”并会在它可以触发的那一刻触发。如何检查触发器是否已设置,如何取消选中?
解决方案
检查当前是否设置了某个触发器实际上比我想象的要难^^
但是,您可以使用 重置触发器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并添加重置行为
如您所见,现在每次进入新状态时都会重置触发器
推荐阅读
- elasticsearch - elasticsearch:计算术语聚合在其他字段上的出现
- node.js - 转义 .env 文件中的 # 字符
- java - 在 Web 服务器线程中出现 OutOfMemoryError 时,Spring 引导请求挂起
- flutter - 在颤振提供程序中关闭应用程序时保存数据
- django - 根据用户角色获取登录用户的django权限以显示/隐藏菜单
- node.js - 如何在 Firebase Hosting 和 Google App Engine 之间启用 CORS
- c - 输入数字的正确方法是什么?
- wpf - WPF上没有前缀的特定值的单选按钮绑定
- flutter - 如何从 Locale (flutter_localizations) 更改默认值?
- c# - 基于字符串值实例化类或对一组类进行分组而不使用接口