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

Godot引擎中Xbox Series X手柄被识别为2个控制器的问题求助

问题根源

该现象由Godot引擎Windows平台默认同时启用XInput、RawInput双输入后端导致:Xbox Series手柄会被两个后端同时识别,因此单个物理手柄对应两个逻辑设备ID;老款Xbox One手柄仅被XInput后端识别,因此无重复问题。

解决方案
  • 方案1:禁用RawInput后端
    无需修改现有业务逻辑,在项目全局初始化阶段关闭RawInput即可,仅保留兼容性更好的XInput后端处理手柄输入,完全覆盖普通Xbox手柄的功能需求。
    在自动加载的全局脚本的_ready方法中添加以下代码:
func _ready():
    Input.set_use_raw_input(false)

修改后重新运行项目,手柄枚举就会恢复正常,单个Xbox Series手柄仅会显示一条设备记录。

  • 方案2:手动过滤重复设备
    如果需要保留RawInput对其他非常规手柄的支持,可以通过GUID对枚举到的手柄做去重处理,优先保留XInput对应的设备条目,避免重复。
    自定义去重获取手柄列表的方法示例:
func get_unique_connected_joypads() -> Array:
    var used_guids = []
    var unique_devices = []
    for device_id in Input.get_connected_joypads():
        var current_guid = Input.get_joy_guid(device_id)
        # XInput设备优先级更高,避免同个手柄的RawInput条目覆盖XInput条目
        if current_guid == "__XINPUT_DEVICE__":
            unique_devices.append(device_id)
            used_guids.append(current_guid)
        elif current_guid not in used_guids:
            unique_devices.append(device_id)
            used_guids.append(current_guid)
    return unique_devices

后续所有获取已连接手柄列表的逻辑,都调用该自定义方法代替原生的Input.get_connected_joypads()即可。

  • 方案3:加入逻辑层防重
    如果不想修改手柄枚举逻辑,可以在玩家按手柄按键加入游戏的环节做校验:记录所有已加入玩家对应的手柄GUID,同一个GUID仅允许生成一个玩家,避免重复设备触发多次加入逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:09:03