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

Unity中触发Gun动画后Walk状态停止,角色无法移动问题

触发拔枪动画后角色无法移动的排查与解决

你的代码移动逻辑(rb.velocity赋值)是持续执行的,所以问题肯定出在Animator动画系统的设置上,和代码逻辑无关。下面按优先级排查:

1. 先查Root Motion设置

这是最常见的原因:

  • 打开你的Gun动画文件,取消Inspector里的Root Motion勾选;
  • 或者在Animator Controller中,选中Gun动画状态,在Inspector里把Root Motion设为None。
    一旦开启Root Motion,动画会直接控制角色位移,完全覆盖你代码里设置的Rigidbody速度。

2. 检查Write Defaults属性

  • 打开Animator Controller,选中Gun状态,确认Write Defaults是勾选状态。
    如果关闭这个选项,进入Gun状态后,动画不会回退默认参数,可能导致角色根节点的移动属性被锁定,间接让刚体失效。所有动画状态的Write Defaults建议保持统一开启。

3. 动画层的权重与混合模式

如果用了多动画层:

  • 确认Gun动画所在层的Blending Mode,如果是Override,会完全覆盖下层的移动动画(虽然这不应该影响刚体速度,但如果该层开了Root Motion就会干扰);
  • 改成Additive模式,或者确保该层只控制上半身(比如拔枪动作),不影响根节点位移。

4. 检查动画是否修改了Rigidbody设置

有些动画会通过动画曲线或事件把Rigidbody设为isKinematic,导致刚体不受代码控制:

  • 去Gun动画的动画曲线里看看有没有修改Rigidbody的参数;
  • 或者在Update里加一行Debug.Log(rb.isKinematic),如果触发拔枪后变成true,要么在动画结束时加事件改回false,要么在代码里强制设置rb.isKinematic = false。

5. 验证骨骼关键帧的怀疑

你担心的骨骼关键帧问题,可以快速验证:

  • 替换Gun动画为一个临时的简单动画(比如只动胳膊),如果此时角色能正常移动,说明原Gun动画的根节点被设置了固定位置关键帧;
  • 重新编辑Gun动画,删掉根节点的位置关键帧,确保位移是相对的。

额外调试技巧

在Update里加一行调试代码,确认移动逻辑是否在执行:

Debug.Log($"输入方向: {dirX}, 刚体速度X: {rb.velocity.x}");

如果输入方向有值,但刚体速度始终为0——动画系统覆盖了速度;如果速度有值但角色不动——大概率是刚体被设为isKinematic,或者碰撞体卡了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:03:12