Unity中使用SetTrigger触发攻击动画无响应问题排查
排查Animator Trigger无法触发动画过渡的常见原因
以下是几个你可以逐一排查的点:
检查过渡条件与Exit Time设置
打开Animator窗口,找到Idle到Attack的过渡:- 确认过渡的条件只有
AttackingTrigger,没有额外未满足的限制(比如Speed == 0这类布尔/数值判断)。 - 把过渡的Has Exit Time关掉——如果开着这个选项,必须等Idle动画播放到结尾才会响应Trigger,而攻击需要即时触发,这个选项会导致点击后无法立刻切换动画。
- 确认过渡的条件只有
修正输入检测逻辑
你用的Input.GetMouseButton(0)会在按住鼠标左键的每一帧都返回true,这意味着每一帧都在调用SetTrigger("Attacking"),连续触发Trigger可能导致Animator状态混乱。应该改用Input.GetMouseButtonDown(0),它只会在左键按下的那一帧返回true,确保只触发一次Trigger。验证Animator引用与代码执行
给代码加个调试日志,确认anims不是空引用,且SetTrigger确实被执行了:if (Input.GetMouseButtonDown(0)) { Debug.Log("触发Attack Trigger"); anims.SetTrigger("Attacking"); }运行游戏后查看控制台是否输出日志,排除空引用或代码未执行的问题。
检查状态机层级与过渡方向
- 确认Attack状态和Idle状态在同一个Layer(比如Base Layer),且该Layer的权重设为1。
- 检查过渡的方向是不是Idle → Attack,别搞反成Attack → Idle了。
Trigger重置的特殊情况
虽然Trigger会在被消耗后自动重置,但如果之前的动画过渡还没完成就连续触发,可能导致Trigger被忽略。可以尝试在Attack动画播放完成后,手动调用anims.ResetTrigger("Attacking")(一般不需要,但极端情况可以试试)。
内容的提问来源于stack exchange,提问作者Gustavo Rodrigues
相关产品推荐
相关产品推荐

