GameInput 上的力反馈如何管理设备输出。借助力反馈,游戏输入设备可以物理移动一个或多个输入控件,为用户提供触觉反馈。力反馈适用于模拟车辆操作的输入设备,例如方向盘和飞行模拟设备。这些设备包含一个力反馈电机,可沿某个轴向控制器施力。在赛车方向盘上,这是转动方向盘的旋转力,用于模拟游戏内场景。将力反馈用于飞行操纵杆时,可让操纵杆在特定位置难以推动或拉动。
有关支持力反馈的 GameInput 接口的更多信息,请参阅 IGameInputDevice 和 IGameInputForceFeedbackEffect。
检查力反馈电机
要创建力反馈效果,你需要表示要应用效果的输入设备的 IGameInputDevice 接口。获取IGameInputDevice 接口后,通过检查 GameInputDeviceInfo 结构体来确认该设备上的力反馈电机数量。可通过调用 IGameInputDevice::GetDeviceInfo 实现。如果输入设备上有力反馈电机,GameInputDeviceInfo 的成员 ForceFeedbackMotorCount 的值将为 1 或更大。
创建力反馈效果
如果某设备的 GameInputDeviceInfo 结构体表明它具有一个或多个力反馈电机,则可通过调用 IGameInputDevice::CreateForceFeedbackEffect 为该设备创建力反馈效果,如以下代码所示。GameInputForceFeedbackParams 结构体。
例如,若要创建具有弹簧行为的反馈效果,GameInputForceFeedbackParams 由 GameInputForceFeedbackEffectKind 值 GameInputForceFeedbackSpring 以及用于弹簧的 GameInputForceFeedbackConditionParams 结构体组成。填入所选 GameInputForceFeedbackEffectKind 枚举值对应的参数。
在按索引选择好力反馈电机效果并创建了 GameInputForceFeedbackParams 结构体后,调用 IGameInputDevice::CreateForceFeedbackEffect 创建效果。它由 IGameInputForceFeedbackEffect 接口表示。
力反馈效果的生命周期与所创建的 IGameInputForceFeedbackEffect 接口相关联。创建效果时,会将其加载到设备。释放最后一个引用后,力反馈效果会停止,并从设备电机中卸载。
应用和更新力反馈效果
创建力反馈效果时,会直接加载到设备电机中。力反馈电机的内存有限,这限制了同时加载和播放的力反馈效果数量。达到此上限后调用 IGameInputDevice::CreateForceFeedbackEffect 会导致该函数返回错误。 创建力反馈效果后,它会以已停止状态加载到力反馈电机。加载完成后,使用 IGameInputForceFeedbackEffect 接口将该效果的状态设置为Running。这会在设备电机上播放该效果。
力反馈效果的状态
力反馈效果会经过若干状态以匹配游戏的当前状态。务必根据游戏更新并留意效果的状态,以维持预期行为。 可以按照 GameInputFeedbackEffectState 设置力反馈的状态,如以下代码所示。Stopped。如果将新创建或已停止的反馈效果设置为 Running 状态,则会从效果的起始处开始播放。将状态设置为 Paused 会使力反馈效果停止影响电机。但是,将 Paused 状态的效果设置为 Running 时,力反馈效果会从上次暂停处继续应用效果模式。
停止效果会结束该效果,但你可以稍后再次触发。例如,当用户在赛车游戏中离开崎岖地形时。同理,暂停效果适用于游戏未变化但用户想要浏览 UI(例如暂停菜单)的场景。
调用 IGameInputForceFeedbackEffect::SetState 设置力反馈效果的状态。
更新力反馈效果
如果新的 GameInputForceFeedbackParams 结构体使用相同的 GameInputForceFeedbackEffectKind 枚举值,则可调整力反馈效果的增益或提供一组新参数。增益
通过 IGameInputForceFeedbackEffect::SetGain 函数调整增益即可改变力反馈效果的强度,如以下代码所示。设置新参数
使用 IGameInputForceFeedbackEffect::SetParams 函数为力反馈效果提供新参数,如以下代码所示。GameInputForceFeedbackConstant 的反馈效果设置参数,来更改参数以模拟不同的反馈模式。
