フォースフィードバック (振動またはコントローラーの振動ともいう) とは、デバイス (ゲームパッドやコントローラーなど) の振動を表します。多くの場合、ゲーム内で起こる力をプレイヤーに伝えるために使用されます。単純な例としては、ゲーム内で爆発が起きた場合にフォース フィードバックを使って衝撃波をシミュレートすることで、プレイヤーの没入感に新たな奥行きを与えます。
一度実装すると、フォースフィードバックはサポートされる全プラットフォームで機能します。これには、 iOS (4.10 時点)、Android、およびコントローラーが含まれます。
Force Feedback Effect アセット
Force Feedback Effect (フォースフィードバック エフェクト) アセット には、特定のフォースフィードバック エフェクトを定義するために使用するプロパティが含まれます。これにより、デザイナーは、使用される各状況に対してフォースフィードバックをカスタマイズすることができます。

各フォースフィードバック エフェクトには、複数のチャンネルがあり、それぞれが異なるエフェクトを再生することができます。例えば、あるチャンネルではコントローラーの右側で大きな長い振動を再生します。一方、もうひとつのチャンネルでは、小さな短いバーストを左側で再生します。各チャンネルのエフェクトのパターンは、カーブによって制御されます。このカーブは右クリックで編集できます。またはカーブのグラフ内でダブルクリックすると内部のカーブを開くことができます。

カーブ、キー、外部のカーブ アセットの作成、カーブ エディタの使用については、「カーブ エディタ「および「キーとカーブ」を参照してください。
フォースフィードバック エフェクトの持続時間は、すべてのチャンネルのカーブの最後のキーの位置に基づき自動的に計算されます。例えば、3 つのチャンネルがあり、それぞれの最後のキーが 1.25、 1.5、 および 1.75 にあるとします。この場合、全体的なエフェクトの持続時間は 1.75 になります。
チャンネルのプロパティ
各チャンネルには、チャンネルに対するエフェクトがどのように再生されるかを制御する以下のプロパティがあります。
項目 | 説明 |
---|---|
Affects Left Large | true の場合、左側の大きなモーターを使用してエフェクトを再生します。 |
Affects Left Small | true の場合、左側の小さなモーターを使用してエフェクトを再生します。 |
Affects Right Large | true の場合、右側の大きなモーターを使用してエフェクトを再生します。 |
Affects RightSmall | true の場合、右側の小さなモーターを使用してエフェクトを再生します。 |
Curve | 時間経過に伴いエフェクトの強度を制御するカーブです。つまり、振動のパターンを定義します。0.0 より大きいと振動し、0.0 より小さいと振動しません。 |
Force Feedback Effect アセットの作成
Force Feedback Effect アセットは、以下のように コンテンツ ブラウザ を使用して作成します。
-
コンテンツ ブラウザ で [Add New (新規追加)] をクリックして Miscellaneous > Force Feedback Effect の順に選択し、作成したばかりのアセットを開きます。
-
デフォルトでは、このアセットはひとつのチャンネルを持ちますが、さらに追加することができます。各チャンネルに対して、そのチャンネルが影響を及ぼす 4 つの出力の組み合わせを選択します。
-
Shift キーを押しながら、カーブ上で 左クリック し、キーを 1 つ以上追加します。
-
カーブ エディタに直接値を入力するか、値をドラッグすることによりキーを操作します。
キー間のカーブを調整するにはカーブのセグメント上で右クリックしてカーブの関数を変更してから通常どおりにタンジェントのラインを調整します。
フォースフィードバックの再生
エディタでプレビュー
Force Feedback Effect のアイコンにマウスをかざすと表示される [Play (プレイ)] ボタンをクリックすると、フォース フィードバック エフェクトをエディタでプレビューすることができます。

プレイヤーに対して直接
フォースフィードバックは、基本クラスの PlayerController
で実装します。ターゲット デバイスやコントローラーでフォースフィードバックを再生するには、ローカルのプレイヤー コントローラーにアクセスする必要があります。
ブループリントでフォースフィードバックを再生する手順は以下の通りです。
-
プレイヤー コントローラーへの参照を、Get Player Controller ノードまたは保存した参照を用いて取得します。
-
参照の出力ピンをドラッグして、コンテキスト メニューに「
Play Force Feedback
」と入力して Client Play Force Feedback を選択します。サーバー上で呼び出されると、フォースフィードバックは所有するクライアントに複製されます。
-
ノード上で直接使用するフォースフィードバック エフェクトを指定するか、接続された変数を使って指定します。
-
エフェクトをループするには [Looping] を選択します。
-
オプションで、Tag 欄を使ってこのエフェクトに一意の名前を付けます。この機能では、同じ名前を持つエフェクトが既に再生中であれば停止し、代わりに新しいエフェクトが再生されます。
C++ でフォースフィードバックを再生する
ローカルのプレイヤー コントローラー上で ClientPlayForceFeedback
を呼び出し、使用するフォースフィードバック エフェクトを渡し、エフェクトがループすべきかどうか、およびエフェクトのオプションの名前も渡します。名前が指定されていて、オリジナルのエフェクトが終了する前に同じ名前を持つ別のフォース フィードバック エフェクトが再生されると、オリジナルのエフェクトはただちに終了し、この新しいエフェクトが代わりに再生されます。
ワールドの位置
見ているプレイヤーからの距離に応じて強さが変化するフォース フィードバック エフェクトを再生するには、エフェクトのソースにしたい場所に Force Feedback コンポーネント を配置します。Force Feedback コンポーネントは、指示に従いフォース フィードバック エフェクトを再生しますが、ワールドで物理的位置も持ちます。サウンドや光のように、プレイヤーが感じる力の強さはプレイヤーがソースからどれくらい離れているかによってデータで定義されている減衰設定に従い変化します。
Force Feedback コンポーネントは、通常のコードやブループリント エディタのメソッドでアクタにアタッチすることができますが、ライブ ゲームプレイ中に必要になれば追加することもできます。これは、ユーティリティ関数、UGameplayStatics::SpawnForceFeedbackAtLocation
(任意のワールド位置でスポーン) または、UGameplayStatics::SpawnForceFeedbackAttached
(特定の既存コンポーネントにアタッチ) を呼び出して行うことができます。こうした関数はスポーンした Force Feedback コンポーネントを戻し、必要に応じて操作できるようにします。ただし、エフェクト再生後にこのコンポーネントを使用しないなら、"Auto Destroy" オプションを使ってエフェクトが終了後に取り除くことができます。