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

Unity FPS角色未按键自动左移问题求助(附脚本代码)

解决角色未按键时持续左移的问题

我仔细看了你的两份脚本代码,逻辑本身是完全没问题的——正常情况下,没按任何按键时Input.GetAxisRaw("Horizontal")应该返回0,最终计算出的移动向量是Vector3.zero,PlayerMotor也就不会执行移动操作。出现持续左移的情况,大概率是Unity的**Input Manager(输入管理器)**配置出了问题,而非脚本代码错误,下面是具体的排查和修复步骤:

1. 优先检查Input Manager的Horizontal轴配置

这是最常见的触发原因:

  • 打开Unity编辑器,依次点击 Edit > Project Settings > Input Manager
  • 在Axes列表里找到Horizontal轴并展开:
    • 确认**Gravity(重力)**值不为0:这个参数控制松开按键后输入值回弹到0的速度,设为0的话,输入值会一直停留在最后一次的状态(比如之前按了左方向键,松开后数值不会归零,持续为-1)。建议设置为默认的3即可。
    • 确认**Dead(死区)**值合理:如果你的设备(比如手柄)存在微小的摇杆漂移,设置0.1-0.2的死区可以过滤掉这些误输入。
    • 检查Negative Button/Positive Button绑定:确认没有不小心绑定到会持续触发的按键(比如系统级的全局按键,或者误绑了某个一直处于激活状态的外设按键)。

2. 临时测试:替换输入检测方式(验证问题根源)

为了彻底排除Input轴的问题,你可以临时修改PlayerController的输入代码,直接检测具体按键,看看是否还会出现自动左移:

// 替换PlayerController里原来的_xMov计算代码
float _xMov = 0;
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) {
    _xMov = -1;
} else if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) {
    _xMov = 1;
}

如果修改后角色不再自动左移,就完全可以确定是Input Manager的Horizontal轴配置出了问题。

3. 排查其他潜在原因

  • 检查是否有其他脚本在修改PlayerMotor的velocity:比如有没有其他组件在调用motor.Move()方法,传入了非零的移动向量?
  • 检查Rigidbody的设置:确认Rigidbody的Is Kinematic未被勾选,也没有设置Velocity或Angular Velocity的初始值。

按照上面的步骤排查,应该能快速解决你的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:04:36