Unity旧输入系统下无线控制器无法获取输入求助
旧输入系统下无线控制器无法识别的解决办法(Unity 2020/2021 LTS)
1. 检查Input Manager的轴映射配置
直接打开Edit > Project Settings > Input Manager,展开Axes列表:
- 把
Vertical、Horizontal这类常用轴的Joy Num改成Get Active Joystick(默认可能固定为Joystick 1,但无线控制器常被识别为Joystick 2及以上) - 如果默认映射还是不行,手动添加专门的无线控制器轴:比如新增一个
Vertical_Wireless轴,Axis选Joystick Axis 2(对应左摇杆Y轴),Joy Num设为Any Joystick
2. 确认系统和Unity对无线控制器的识别
- Windows平台:打开设备管理器,检查无线控制器的驱动是否正常安装(Xbox手柄用Xbox Accessories更新,PS手柄可以用DS4Windows补全驱动)
- Unity内验证:
- 2021版本:用
Edit > Input Debugger查看实时输入状态,确认无线控制器的摇杆/按键信号有没有被Unity接收 - 2020版本:在脚本里加一行
Debug.Log(string.Join(", ", Input.GetJoystickNames()));,运行后看控制台是否输出无线手柄的名称,能输出就说明Unity已经识别到设备
- 2021版本:用
3. 脚本层面兼容调整
别死磕默认的Vertical/Horizontal轴,直接针对无线控制器的原生轴获取输入,比如PS/Xbox无线手柄的左摇杆Y轴是JoyAxis2,X轴是JoyAxis1。修改后的示例脚本:
using UnityEngine; public class WirelessController : MonoBehaviour { public float speed = 10f; public float rotationSpeed = 100f; void Update () { // 优先取无线控制器的轴输入,没有则 fallback 到默认轴 float translation = Input.GetAxis("JoyAxis2") != 0 ? Input.GetAxis("JoyAxis2") : Input.GetAxis("Vertical"); float rotation = Input.GetAxis("JoyAxis1") != 0 ? Input.GetAxis("JoyAxis1") : Input.GetAxis("Horizontal"); translation *= speed * Time.deltaTime; rotation *= rotationSpeed * Time.deltaTime; transform.Translate(0, 0, translation); transform.Rotate(0, rotation, 0); } }
4. Unity版本补丁修复
你用的2020.3.36f1和2021.3.8f1都是LTS版本,检查同分支的更新日志:
- 打开Unity Hub,查看对应版本的后续补丁(比如2021.3.20f1),如果有无线控制器识别的修复内容,直接升级到同LTS分支的更高版本
- 确保
Project Settings > Player > Other Settings里的Active Input Handling设为Old Input System Only,不要选混合模式
内容的提问来源于stack exchange,提问作者Hannah Syed
相关产品推荐
相关产品推荐

