跳轉到主要內容
使用本主題了解 GameInput 上的力回饋如何管理裝置輸出。透過力回饋,遊戲輸入裝置可以實際移動裝置的一或多個輸入控制項,為使用者提供觸覺回饋。力回饋適用於模擬載具操作的輸入裝置,例如方向盤和飛行模擬設備。這些裝置包含力回饋馬達,會沿著某個軸向對控制器施力。在賽車方向盤上,這是一種轉動方向盤以模擬遊戲中情境的旋轉力。搭配飛行搖桿使用力回饋,可讓操縱桿難以從特定位置推動或拉動。 如需支援力回饋之 GameInput 介面的詳細資訊,請參閱 IGameInputDevice 和 IGameInputForceFeedbackEffect。

檢查力回饋馬達

若要建立力回饋效果,您需要代表要套用效果之輸入裝置的 IGameInputDevice 介面。取得 IGameInputDevice 介面之後,請檢查 GameInputDeviceInfo 結構,以確認裝置上的力回饋馬達數目。這可以透過呼叫 IGameInputDevice::GetDeviceInfo 來完成。如果輸入裝置中有力回饋馬達,GameInputDeviceInfo 成員 ForceFeedbackMotorCount 的值會是 1 或更大。

建立力回饋效果

如果裝置的 GameInputDeviceInfo 結構指出它有一或多個力回饋馬達,請如下列程式碼所示,呼叫 IGameInputDevice::CreateForceFeedbackEffect 為裝置建立力回饋效果。
馬達索引參數是受力回饋影響之馬達的索引。此索引對應至 GameInputDeviceInfo 結構之 GameInputForceFeedbackMotorInfo 陣列中的適當馬達。此陣列包含現有力回饋馬達及其功能的相關資訊。 對於第二個參數,請如下列程式碼所示,為力回饋效果建置描述效果特性的 GameInputForceFeedbackParams 結構。
選擇 GameInputForceFeedbackEffectKind 列舉,然後初始化對應的 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 函式調整增益,以變更力回饋效果的強度。
增益可以是介於 0 到 1 之間的值。根據預設,力回饋效果的增益設定為 1。此函式主要用於減弱效果的強度。

設定新參數

如下列程式碼所示,使用 IGameInputForceFeedbackEffect::SetParams 函式為力回饋效果提供新參數。
使用此函式取代力回饋效果的參數時,請使用與您要設定參數之力回饋效果相同的 GameInputForceFeedbackEffectKind 列舉。新參數會立即生效,並在不停止執行中效果的情況下套用。請注意,如果持續時間值沒有變更,持續時間計時器不會重新整理。只有在提供不同的持續時間值,或停止並重新啟動效果時,才會重新整理。 如果執行中的效果已停止,則會以新參數重新啟動。部分遊戲可以藉由為 GameInputForceFeedbackEffectKind 列舉為 GameInputForceFeedbackConstant 的回饋效果設定參數,來變更參數以模擬不同的回饋模式。

GIP 與 HID 裝置之間的功能差異

在主機上,所有裝置都使用 GIP 驅動程式模型。在 PC 上,裝置可以使用 GIP 或 HID 驅動程式模型;安裝廠商驅動程式通常會將其轉換為 HID 模式 (除非有可手動控制的實體開關)。HID 裝置的力回饋功能受限於其原先設計所依據的 DirectInput API。GameInput 會盡可能設法因應這些限制。儘管如此,仍存在一些差異。 HID 裝置目前將力回饋限制在 AngularX 軸,無論硬體支援哪些其他軸。此設定可為絕大多數賽車方向盤提供良好的支援。 HID 力回饋目前可在 19H2 以上版本的 Windows 中使用,並將在未來的更新中更新為可在 19H1 中運作。

參考 API 文件

另請參閱

IGameInputForceFeedbackEffect IGameInputDevice
最後修改於 2026年10月6日