RawInput 插件介绍

用户自定义设备,比如操纵杆和方向盘在UE5中使用时,一般有三种方式:

  1. 直接调用 Windows API开发
  2. 外部工具中vJoy + Joystick Gremlin + UE5
  3. 官网RawInput插件

这篇主要是介绍RawInput插件的使用。

RawInput插件的使用是基于增强输入,增强输入的使用请参看《UE5增强输入》文章。

RawInput 插件为Microsoft XInput API(应用程序编程接口)不能正确处理的特定的用户定义设备提供支持,通常是操纵杆和方向盘。
这些输入设备的按钮和轴可以自定义映射到游戏输入,包括插件本身创建的新输入。

启用RawInput

默认情况下不启用该插件。在 插件(Plugins) 菜单的 输入设备(Input Devices) 部分中将其启用。

启用该插件后,Raw Input (原始输入)部分将出现在 项目设置(Project Settings) 菜单中。

配置设备

每个设备(比如操纵杆或油门)需要通过供应商ID和产品ID标识,这些ID是十六进制值,位于设备的驱动程序属性中。
轴(默认为8个)和按钮(默认为12个)数组将添加到控制器配置中。
这样就能够将任何控制器轴或按钮(通过数组索引指示)映射到任何虚幻引擎轴或键。
该插件提供8个新轴(“通用USB控制器轴1"到"通用USB控制器轴8”)和12个新按钮(“通用USB控制器按钮1"到"通用USB控制器按钮20”)。
每个轴和按钮都可以启用或禁用,轴也可以调转方向和偏移。

在插入USB的设备后,可以通过Windows控制面板(在设备管理器下面)中看到硬件ID信息,如下图:

供应商ID是"VID_"后面的四位字符串(044F),产品ID是"PID_"后面的四位字符串(0405),在RawInput中配置设备时需要该信息。

注:图马斯特A10C金属疣猪摇杆的供应商ID是(044F)产品ID是(0402),油门的供应商ID是(044F)产品ID是(0404)。

在RawInput中配置设备

以下示例是以 Logitech G920 驱动游戏的控制器。

通过官方驱动程序将方向盘报告为轴1,将制动器报告为轴3,将加速踏板报告为轴4。

可以通过Windows的外设测试程序 或 hardwaretester(https://hardwaretester.com/gamepad) 测试相关轴或按键位置

在RawInput插件设置中,各个输入必须输入到设备驱动程序的对应轴处的数组中。即,方向盘数据必须在数组元素1中,制动器数据必须在数组元素3中,加速踏板数据必须在数组元素4中。所有其他条目可能会被移除或标记为禁用。

需要注意的是,输入的数组索引无需对应于"通用USB控制器轴"或"通用USB控制器输入"值。例如,虽然制动器位于数组位置3中,但绑定的是"通用USB控制器轴2"。这是为了确保将不同的控制器配置为相同的工作方式,即使它们使用不同的输入轴也没有影响。

属性:
Enabled 是否启用
Key 对应的键
Inverted 是否反向
Gamepad Stick(UE5新增) 关闭 0~1 开启 -1~1
offset 偏移

由于设备输出范围与我们预期的标准控制器输出范围不符,因此将重新映射输入范围。
方向盘返回0.0(左)到1.0(右)中的值,但我们需要以0.0为输入范围中间值,因此我们给它设置一个偏移值-0.5。
制动器和加速踏板也返回0.0到1.0中的值,但设备使用0.0来指示按下踏板,使用1.0指示踏板抬起,而我们的项目需要相反的设置。
为了进行这一调整,我们将轴值调转,然后添加偏移值1.0。

将RawInput轴映射到输入绑定

现在可以将新轴映射到游戏输入绑定。
方向盘(在"通用USB控制器轴1"上)映射到范围[-0.5, 0.5],但我们希望它更灵敏一些,因此可以按系数3.0将它上调。
同样,制动器(在"通用USB控制器轴2"上)需要沿负方向延伸,并且应该比加速踏板力量更强,因此将其调节-2.0。
加速踏板(在"通用USB控制器轴3"上)无需修改,只需要添加到相应的输入绑定。
通过使用RawInput和添加这些输入绑定,我们无需任何新输入绑定或对项目代码或蓝图进行任何更改,即可支持。