Unity中触发shoot触发器动画重复播放2次的问题及解决方案
Unity Animator trigger触发动画重复播放问题修复
问题描述
使用Unity 2020.3.0f1版本开发时,Animator组件配置了触发名为shoot的trigger参数时播放对应射击动画的逻辑,触发后出现动画重复播放2次的异常。调整Transition duration(过渡时长)参数后,要么出现动画完全不播放的问题,要么仍然保持重复播放两次的问题。
修复方案
可通过Animator.GetCurrentClipInfo接口检测目标动画是否正在运行,仅在动画未运行的状态下触发trigger参数即可避免重复播放问题,参考实现代码如下:
using UnityEngine; public class ShootAnimController : MonoBehaviour { // 绑定对应Animator组件 public Animator roleAnimator; // 射击动画片段的实际名称,与Animator窗口配置保持一致 [SerializeField] private string shootClipName = "Shoot"; // 射击动画所在的动画层索引,默认第一层为0 [SerializeField] private int animLayerIndex = 0; public void PlayShootAnim() { bool isShootAnimRunning = false; // 获取当前层正在播放的所有动画片段信息 AnimatorClipInfo[] currentClips = roleAnimator.GetCurrentAnimatorClipInfo(animLayerIndex); foreach (AnimatorClipInfo clipInfo in currentClips) { if (clipInfo.clip.name == shootClipName) { isShootAnimRunning = true; break; } } // 仅当射击动画未播放时触发trigger if (!isShootAnimRunning) { roleAnimator.SetTrigger("shoot"); } } }
注意事项
- 无需修改原有Transition duration配置即可适配
- 若射击动画配置了前置过渡动画,可额外调用
GetNextAnimatorClipInfo接口检测待播放队列中是否已存在射击动画,避免重复入队 - 动画片段名称、动画层索引需要和项目内Animator的实际配置完全匹配
内容的提问来源于stack exchange,提问作者Artemiy Mak
相关产品推荐
相关产品推荐

