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

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已经识别到设备

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:55:24