GameInput 上のフォースフィードバックがデバイス出力をどのように管理できるかについて説明します。フォースフィードバックを使用すると、ゲーム入力デバイスは、デバイスの 1 つまたは複数の入力コントロールを物理的に動かしてユーザーに触覚フィードバックを提供できます。フォースフィードバックは、ドライビングホイールやフライトシミュレーションリグなど、車両の操作をシミュレートする入力デバイスで機能します。これらのデバイスには、コントローラーに軸方向の力を加えるフォースフィードバックモーターが含まれています。レーシングホイールでは、ゲーム内のシナリオをシミュレートするためにホイールを回転させる回転力になります。フライトスティックでフォースフィードバックを使用すると、特定の位置からレバーを押したり引いたりしにくくすることができます。
フォースフィードバックをサポートする GameInput インターフェイスの詳細については、IGameInputDevice および IGameInputForceFeedbackEffect を参照してください。
フォースフィードバックモーターの確認
フォースフィードバック効果を作成するには、効果を適用したい入力デバイスを表す IGameInputDevice インターフェイスが必要です。IGameInputDevice インターフェイスを取得した後、GameInputDeviceInfo 構造体を調べて、デバイス上のフォースフィードバックモーターの数を確認します。これは IGameInputDevice::GetDeviceInfo を呼び出すことで実行できます。入力デバイスにフォースフィードバックモーターがある場合、GameInputDeviceInfo のメンバー ForceFeedbackMotorCount の値は 1 以上になります。
フォースフィードバック効果の作成
デバイスの GameInputDeviceInfo 構造体がフォースフィードバックモーターを 1 つ以上持つことを示している場合、次のコードに示すように 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 の GameInputForceFeedbackEffectKind 列挙型を持つフィードバック効果のパラメーターを設定することで、パラメーターを変更してさまざまなフィードバックパターンをシミュレートできます。
