Unity中C#控制的攻击与格挡动画触发异常求助
动画触发异常修复方案
核心问题定位
你的问题出在Animator状态机的过渡条件配置错误,大概率是给Any State到Attack的过渡添加了Block == true的依赖条件,导致只有格挡状态下才能触发攻击动画。以下是具体修复步骤:
1. 清理过渡条件
打开你的Animator Controller:
- 选中Any State → Attack的过渡,在Inspector面板的
Conditions列表中,只保留Attack触发器为true的条件,删除所有和Block相关的条件。 - 选中Any State → Block的过渡,条件仅保留
Block == true;同时给Block动画添加到Idle状态的过渡,条件设置为Block == false。
2. 优化过渡响应速度
对所有战斗相关的动画过渡(Attack、Block以及它们回到Idle的过渡)进行以下设置:
- 取消勾选Has Exit Time:让动画可以立即响应状态切换,不需要等当前动画播放完毕。
- 将Transition Duration设置为
0(或极小值):消除动画切换的延迟感。 - 设置Interrupt Source:根据需求选择,比如让Attack过渡的
Interrupt Source为Current State,这样攻击可以打断格挡动作(如果需要的话)。
3. 重置攻击触发器
攻击动画播放完毕后,触发器不会自动重置,可能导致后续状态异常。添加动画事件来重置:
- 在PlayerCombat脚本中新增方法:
public void ResetAttackTrigger() { animator.ResetTrigger("Attack"); }
- 打开Attack动画的时间轴,在动画末尾添加一个Animation Event,绑定到PlayerCombat组件的
ResetAttackTrigger方法上。
4. 完善状态机闭环
确保所有战斗动画都能回到基础Idle状态:
- Attack动画播放完毕后,自动过渡到Idle(开启该过渡的Has Exit Time即可,无需额外条件)。
- Block动画在
Block == false时,过渡回Idle状态。
内容的提问来源于stack exchange,提问作者Justus Tate
相关产品推荐
相关产品推荐

