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
相关产品推荐
相关产品推荐

