为什么应该使用 GameInput 支持我的游戏的输入代码?
GameInput 是一个可更新的输入平台。使用它,Windows 可以更好地抽象市面上各种输入设备,并随着时间通过平台更新持续改进对这些设备的支持。使用 GameInput 后,你的游戏会通过 Windows 和硬件的发布自动适配新设备。 此外,GameInput 提供对以前在 Windows 上不可用的更新功能的访问,例如脉冲扳机,以及对触觉反馈和传感器等功能的更佳支持。使用 GameInput,你的游戏可以以最少的代码更改利用这些功能。GameInput 支持哪些平台?
GameInput 可在以下平台使用:- XBOX(自 2510 GDK 起 V.1+)
- Windows 10(版本 19H1 / 2019 年 5 月更新及更高版本)
- Windows 11
我在 XBOX 和 PC 上是否需要不同的版本?
不需要,同一 GameInput API 可在所有平台上工作。自 2510 GDK 起,最新的 GameInput API 在 XBOX 和 PC 上都可用,Microsoft.GameInput NuGet 包中提供的是相同的头文件和二进制文件。GameInput 安装程序仅在 PC 上需要,因为 XBOX 上的 GDK 已随附运行时。GameInput 是否可用于像 Unreal Engine 这样的常用引擎?
可以,但集成程度因引擎而异。有些引擎将第一方 GameInput 支持作为引擎插件一起发布,而其他引擎则依赖示例或由你自己集成的本机插件。- Unreal Engine:从 Unreal Engine 5.4 起,GameInput 支持随引擎一起以一组插件的形式发布。Game Input Base 提供核心功能与接口,Game Input (Windows) 为 Win64 与 WinGDK 实现该功能,XBOX Common Game Input 则为 XBOX One 与 XBOX Series X|S 实现该功能。在项目中启用这些插件即可在 PC 与主机上都通过 GameInput 路由输入。更多信息,参见 Microsoft GDK plug-ins for Unreal Engine。
- Godot:XBOX Godot 示例包含一个将 GameInput 绑定到 Godot 的 GDExtension,并会将 GameInput 桥接到 Godot 的
Input与InputMap系统。这是一个供你构建并适配到自己项目中的参考集成,而不是引擎的内置功能。更多信息,参见 Godot 入门。 - Unity:目前没有 Microsoft GDK 包在 PC 上向 Unity 公开 GameInput,因此 PC 上的 Unity 游戏通常通过 Unity Input System 读取输入。在 XBOX Series X|S 与 XBOX One 上,面向 Unity 的 GXDK Input System 包为 Unity Input System 添加了主机专用功能。更多信息,参见 GDK packages for Unity。
我的应用找不到 GameInput——我应该检查什么?
- 确认目标计算机上已安装 GameInput 运行时。对于 v.1 及更高版本,这需要 Microsoft.GameInput 包,用户可通过 Microsoft.GameInput NuGet 包中的 MSI 包安装。若要安装最新版本的包,也可以在提升权限的命令提示符中运行
winget install Microsoft.GameInput。 - 确保你的应用链接到正确的 GameInput 库。使用 NuGet 包中的最新版本可确保你的项目在不同端点/平台上使用正确的 GameInput 二进制文件。
- 检查你的 Windows 版本是否支持 GameInput(19H1 或更高版本)。
从 XInput 移植到 GameInput 的难度有多大?
许多 XInput 函数与 GameInput 的对应函数一一对应,简化了移植工作。主要区别在于 GameInput 使用 C++ 接口而非扁平的 C 函数。GameInput 还提供了 XInput 中没有的额外功能,例如对 XBOX One 控制器及其他同类设备上脉冲扳机的访问。如何从 DirectInput 或 Raw Input 移植?
GameInput 在 GameInputDeviceInfo 结构体中提供了接口路径。此字段与 DirectInput API 使用的字段相同,允许应用程序继续使用现有的 DirectInput 代码进行设备枚举与信息检索,同时将输入读取和其他功能迁移到 GameInput。有关详细信息,请参阅 GameInput 移植指南。GameInput 服务做什么?
GameInput 服务负责协调对系统输入设备的访问,并为其他应用程序提供有用的兼容层和抽象层。GameInput 服务的功能包括:- 处理输入过滤与同步
- 提供平台更新与设备驱动改进
- 在多个 GameInput 客户端实例之间协调对输入设备的访问
我可以从渲染线程调用 GameInput 吗?
可以,几乎所有 GameInput 函数在渲染线程等时序敏感的上下文中都是安全的。主要例外是GameInputCreate,应在应用程序初始化期间调用。
