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

Unity角色无法左右平移问题求助:已配置WASD按键仍无效

排查Unity角色无法左右平移的问题

先帮你拆解下可能的问题点,一步步来排查:

1. 先确认脚本基础运行状态

首先检查最基础的环节:

  • 你的Player脚本是不是真的挂载在角色对象上了?而且脚本组件没有被禁用(Inspector面板里的复选框是勾上的)。
  • 运行游戏后,盯着Console面板,按A/D键,看horizontalThrow的Debug输出有没有变化:
    • 如果数值一直是0:那输入设置可能还是有隐藏问题。去Edit > Project Settings > Input Manager里找到Horizontal轴,仔细核对:Positive Button是d,Negative是a,Type选Key or Mouse Button,Dead值别设太大(比如0.001,避免轻微按键没反应),Sensitivity可以设为1。
    • 如果数值正常变化(按A出-1,D出1)但角色不动:那大概率是动画或者其他组件干扰了位置。

2. 动画与脚本的冲突排查

你提到的角色动画是最可能的冲突点,核心在于**动画根运动(Root Motion)**的设置:

  • 打开角色的Animator组件,看Apply Root Motion选项是不是勾选了。如果勾选了,动画会直接驱动角色的位置和旋转,这时候你脚本里transform.localPosition = ...的操作会被动画帧覆盖,导致脚本的移动完全失效。
  • 解决方法有两种:
    • 方案一:直接取消Apply Root Motion的勾选,让脚本完全接管角色的位置控制,动画只负责播放动作(比如行走的姿态)。
    • 方案二:如果需要保留根运动,那得修改动画导入设置:选中动画文件,在Inspector面板里找到Root Motion,勾选Bake Into Pose,把根运动的位移烘焙到动画姿态里,这样动画就不会改变角色的全局位置了。

3. 脚本优化建议

你的脚本本身逻辑没问题,但有个小细节可以修正(不影响功能但符合编码规范):把VerticalThrow改成小写开头的verticalThrow(C#变量名通常用驼峰式命名)。另外如果需要限制角色移动范围,可以加个Mathf.Clamp来约束X轴位置:

public class Player : MonoBehaviour { 
    [SerializeField] float controlSpeed = 10f; 
    // 可选:设置X轴移动边界
    [SerializeField] float xRange = 5f;

    void Update() { 
        float horizontalThrow = Input.GetAxis("Horizontal"); 
        float verticalThrow = Input.GetAxis("Vertical"); 

        float xOffset = horizontalThrow * Time.deltaTime * controlSpeed; 
        float newXPos = transform.localPosition.x + xOffset; 
        // 限制X轴移动范围,防止角色出界
        newXPos = Mathf.Clamp(newXPos, -xRange, xRange); 

        transform.localPosition = new Vector3(newXPos, transform.localPosition.y, transform.localPosition.z); 
    } 
}

先按上面的步骤排查,应该能解决问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:22:49