Skip to main content
使用本主題了解 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
Last modified on October 6, 2026