You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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. 重置攻击触发器

攻击动画播放完毕后,触发器不会自动重置,可能导致后续状态异常。添加动画事件来重置:

  1. 在PlayerCombat脚本中新增方法:
public void ResetAttackTrigger()
{
    animator.ResetTrigger("Attack");
}
  1. 打开Attack动画的时间轴,在动画末尾添加一个Animation Event,绑定到PlayerCombat组件的ResetAttackTrigger方法上。

4. 完善状态机闭环

确保所有战斗动画都能回到基础Idle状态:

  • Attack动画播放完毕后,自动过渡到Idle(开启该过渡的Has Exit Time即可,无需额外条件)。
  • Block动画在Block == false时,过渡回Idle状态。

内容的提问来源于stack exchange,提问作者Justus Tate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:19:56