Skip to main content

为什么应该使用 GameInput 支持我的游戏的输入代码?

GameInput 是一个可更新的输入平台。使用它,Windows 可以更好地抽象市面上各种输入设备,并随着时间通过平台更新持续改进对这些设备的支持。使用 GameInput 后,你的游戏会通过 Windows 和硬件的发布自动适配新设备。 此外,GameInput 提供对以前在 Windows 上不可用的更新功能的访问,例如脉冲扳机,以及对触觉反馈和传感器等功能的更佳支持。使用 GameInput,你的游戏可以以最少的代码更改利用这些功能。

GameInput 支持哪些平台?

GameInput 可在以下平台使用:
  • XBOX(自 2510 GDK 起 V.1+)
  • Windows 10(版本 19H1 / 2019 年 5 月更新及更高版本)
  • Windows 11
尽管 GameInput v.0 是 Windows SDK 和 Microsoft Game Development Kit (GDK) 的一部分,但使用更新版本进行编译需要使用 NuGet 包,主机和 PC 都是如此。GameInput v.1+ 运行时自 2510 GDK 起在主机上可用,但使用此运行时需要针对最新 GameInput NuGet 包中的头文件/库进行构建和链接。PC 和主机 API 的最新版本始终可在 Microsoft.GameInput NuGet 包中获取。

我在 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 的 InputInputMap 系统。这是一个供你构建并适配到自己项目中的参考集成,而不是引擎的内置功能。更多信息,参见 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 功能,可以使用 Microsoft.GameInput NuGet 包,从本机代码直接调用 GameInput。

我的应用找不到 GameInput——我应该检查什么?

  1. 确认目标计算机上已安装 GameInput 运行时。对于 v.1 及更高版本,这需要 Microsoft.GameInput 包,用户可通过 Microsoft.GameInput NuGet 包中的 MSI 包安装。若要安装最新版本的包,也可以在提升权限的命令提示符中运行 winget install Microsoft.GameInput
  2. 确保你的应用链接到正确的 GameInput 库。使用 NuGet 包中的最新版本可确保你的项目在不同端点/平台上使用正确的 GameInput 二进制文件。
  3. 检查你的 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,应在应用程序初始化期间调用。

另请参阅

GameInput 简介 GameInput API 版本管理 从 XInput 移植到 GameInput
最后修改于 2026年8月24日