linux模拟手柄输入,Steam 输入手柄模拟最佳实践

Steam 输入是一项服务,允许 Steam 用户用自己喜爱的设备游玩任何支持控制器的游戏。 Steam 输入将通过手柄模拟、键鼠模拟或 Steam 输入 API 将用户的输入转化为游戏所能理解的信息。 在这里,我们将重点说明如何最好地使用 Steam 输入手柄模拟,来扩展您游戏现有的控制器支持。

什么是手柄模拟?

在 Windows 操作系统中,Steam 界面会和 XInput、DirectInput、RawInput 以及 Windows.Gaming.Input 挂钩,并注入模拟的 Xbox 控制器设备。 在 MacOS 和 Linux 中,模拟的控制器由驱动提供。

控制器将会作为 Xbox 控制器出现在您游戏中,也就意味着带有额外输入的控制器,有些输入会彼此重复。比如,Playstation 触控板点击和选项按键都会映射至 XInput 的 Start 按键。

除了一般的手柄输入外,还可以将 Switch、PlayStation 和 Steam 控制器陀螺仪输入绑定至鼠标模拟,提供动作控制。 这仅适用于单一本地玩家的游戏,因为只有一个鼠标输入,并且也依赖于游戏同时接收鼠标和手柄输入。 如果您对这些功能感兴趣同时又不想受到以上警告限制,请考虑添加 Steam Input API。

您可以询问 Steam 当前使用的控制器类型,来显示特定设备的字形,但仅限于您当前 Steamworks SDK 支持的类型。 如果您对永不过时的字形支持感兴趣,请整合 Steam Input API。

即使您已经支持某些控制器,可能还是有用户会通过 Steam 输入来使用这些控制器,因为 Steam 远程畅玩使用它在流式传输的同时提供输入,而有相当一部分用户也都启用了 Steam 输入,来在整个 Steam 库中重新配置其控制器。 总体来说,2020 年所有的控制器会话中,大约有四分之一使用的是 Steam 输入,其中包括近乎一半的 Playstation 控制器会话。

Steam 上有超过 2000 款游戏在为至少一种控制器使用手柄模拟,包括 Monster Hunter: World、Ace Combat 7、《勇者斗恶龙 XI》、Into the Breach、《中土世界:战争之影》等知名游戏,尽管不是所有这些游戏都采纳了全部的最佳实践 在这里,我们要以 Into the Breach 为例,因为这款游戏在遵照每一项最佳实践方面做得非常好。

显示设备专用艺术作品我们支持几种通过 Steam 输入手柄模拟获取设备专用字形的途径。一种针对可以在运行时载入永不过时的图像(即当 Steam 更新了 Steam 输入时这类图像无需任何游戏更新也能使用)的游戏;另外两种针对需要将图像烘焙进自己的资产中的游戏,或希望使用与控制台端口相同风格的艺术作品的游戏。 Into the Breach 为控制器使用了自己的艺术作品。Xbox/Steam:

c91d5249e3ae5b9c520527dcaeb88b8b.png

PlayStation:

741c29194fd022d0a69461330c0adc2d.png

Nintendo Switch 控制器:

56253b28ff1d6a0edfcaba3a9ff5906c.png

注意:即使您使用的是您自己的艺术作品,我们也建议您在无法识别控制器时回退至 Steam 艺术作品,或调用我们的帮助函数以找到您的游戏发行时存在的最接近选项,这样今后添加的设备会有适当的字形。

显示 Steam 的永不过时字形您需要使用以下函数:

// 在使用单个函数前初始化接口——仅需调用一次!

SteamInput()->Init()

// ...

// SteamAPI_RunCallbacks() 会为所有初始化的接口调用 RunFrame 函数,

// 且大部分游戏会已经开始定期调用此代码。 如果您没有这么做,则需要手动更新

// Steam 输入接口

SteamInput()->RunFrame();

// ...

// 用您正在询问的 XInput 槽位代替。 这一数值在 0 至 3 之间

// 如果您在决定使用哪个 API 之前就使用 RawInput 来检测设备,

// 请参阅“使用 RawInput 检测设备”一节。

int nXinputSlot = 0;

// 用您查询的按钮进行替代

EXboxOrigin eXboxButtonToGetGlyphFor = k_EXboxOrigin_A;

EInputActionOrigin buttonOrigin = k_EInputActionOrigin_XBoxOne_A;

// 如果控制器是通过 Steam 输入配置的,转换按钮

InputHandle_t controller1Handle = SteamInput()->GetControllerForGamepadIndex( nXinputSlot

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值