動的バインディング
ゲームプレイ イベントまたは UI アニメーション では、シネマティック エクスペリエンス中または UI とのインタラクション中にプレイヤーに表示されるさまざまなオブジェクトをアニメートすることができます。動的所有 は、カスタムのブループリント ロジックを提供し、レベル内で所有するオブジェクトまたはスポーンするオブジェクトを選択します。この機能は、プレイヤーのポーン を動的にバインドするなど、一般的な解像度ロジックの迅速なバインディング オプションも提供します。トラック および プロパティ は新規に所有されたまたはスポーンした アクタ にバインドすることができ、元のバインドされたオブジェクトと同じエフェクトを持つことになります。
シーケンサーでの動的バインディングを利用すると、以下のことができます。
- カスタムの ブループリント ロジックを使用し、レベル内のオブジェクトが動的に所有されるように定義する。このロジックは、レベル シーケンスの Director ブループリント 内に実装されます。UMG の場合、これは UMG ブループリント グラフ内に実装されます。
- カスタムのブループリント ロジックにバインドされるように動的にスポーンするオブジェクトを定義する。
- プレイヤー コントローラー に対するバインディングを迅速に定義する。
- 新規オブジェクトに動的にバインドする場合に、トラック および プロパティ が同じトラックおよびプロパティに影響するように互換性を確保する。
- カスタムのブループリント ロジックを動的に所有するように Unreal Motion Graphics (UMG) でウィジェットを定義する。
つまり、動的バインディングを使用し、所有可能なアクタまたはスポーンしたアクタをオーバーライドすることができます。

動的バインディングの例。Manny のシーケンスはオーバーライドされ、シーケンス アニメーションは「Goldie」にバインドされています。
ユース ケース
たとえば、作成済みのシネマティックスに合う、固定されたプレイヤー キャラクターがあるとします。あなたは、このキャラクターを使用し、ゲームプレイとシネマティックスを融合させたいと考えています。シネマティックを作成する場合、通常、スポーン可能なものを作成しますが、ランタイム時にはプレイヤーにコントロールを渡したいため、キャラクターがスポーンするのは不都合です。通常は、プレイヤーのポーンを取得し、バンディングが渡されるようにします。たとえばこれは、多数のミッションがあり、自分のキャラクターで行った選択に基づいて、そのミッションに参加可能な多数の NPC がある RPG ゲームで発生します。編集時には、キャラクターのミッションに参加するのが誰かはわかりません。これにより、シネマティックスの作成が難しくなります。
前提条件
- シーケンサー および インターフェース を理解していること。
- トラック を作成および使用する方法を理解していること。
- Possessable (所有可能なもの) および Spawnables (スポーン可能なもの) を理解していること。
- ブループリント を理解していること。
動的バインディングを作成する
階層ツリー でアクタを右クリックすると、新しいエンドポイント、プレイヤー ポーン に解決される関数、または既存の動的バインディングに動的にバインドするオプションが表示されます。[Quick Bind (クイック バインド)] の下にある最後の 2 つのオプションは、イベント トラック の仕組みにも似ています。
動的にバインドすると、アクタのアイコンの左下に青色の pip オーバーレイが表示されます。

- Cube (キューブ) は動的に所有されています。
- Cylinder (シリンダー) は所有されていません。
[Dynamic Binding (動的バインディング)] メニュー オプションには、[Create New Endpoint (新規エンドポイントを作成)] する、または [Quick Bind] によってソルバにアクタをバインドするための方法が含まれます。[Dynamic Possession (動的所有)] > [Endpoint (unbound) (エンドポイント (アンバウンド))] メニューから [New Endpoint (新規エンドポイント)] を作成するか、[Quick Bind] 機能を使用するよう選択できます。これらのオプションについては、以下で詳細を説明しています。

アクタが動的にバインドされると、UE は レベル シーケンスの Director ブループリント を開きます。
新規エンドポイントを作成する
新規の動的エンドポイントを作成すると、カスタム ブループリント ノードのペア (Binding ノード および Return Node) が作成され、バインディングを行う方法について独自のロジックを追加できます。そこから、Possessable または Spawnable によってバインドされた、返されるオブジェクトを入力できます。

Return Node には、動的にバインドされたアクタを所有またはスポーンできる機能とそれを置き換える他のアセットが含まれています。[Return Value Object (戻り値オブジェクト)] の 青色の入力ピン を右クリックし、[Split Struct Pin (構造体ピンを分割)] を選択します。分割が行われると、[Return Value Object] ドロップダウン メニューから返されるアセットと、アセットが所有されるのかスポーンするのかを選択できます。デフォルトでは、[Return Value Is Possessed Object (戻り値は所有されているオブジェクト)] がオンになっている場合、それはアセットが 所有されている ことを意味します。[Return Value Is Possessed Object] をオフにすると、アセットが スポーンしたアクタ として返されます。

クイック バインド
クイック バインド の方法を使用すると、Resolve to Player Pawn を選択することができます。これによって、割り当てられたバインディングをプレイヤー ポーンにバインドするためのエンドポイントが作成され、そのロジックが、呼び出す動的にバインドされたアクタのために、レベル シーケンスの Director ブループリント に追加されます。

既存の動的バインディング
既存の動的バインディングがある場合、他のアクタをバインドするために再度利用できます。
- アクタを右クリックし、[Quick Bind] メニュー から、[Unbound] > [Quick Bind] を選択します。
- [This Sequence (このシーケンス)] > [Call Function (関数を呼び出す)] > リストされている任意のバインディングを選択します。
バンディングには、その作成元のアクタに基づいて名前が付けられ、「Dynamic Binding」が名前の末尾に追加されます。たとえば、汎用のキューブから動的バインディングを作成した場合、バインディング名は「Cube Dynamic Binding」となります。
ブラウズ アイコン ([Dynamic Possession] > [Endpoint (エンドポイント)] > [Browse (ブラウズ)]) を使用し、関連付けられたブループリント エンドポイントに移動できます。

シーケンスのアクタを削除しても、以前に動的バインディングによって作成されたブループリントは削除されません。他のアセットを使用して動的バインディングによって作成された、使用されていないブループリントを削除する場合、その関数は、関連付けられているシーケンスの DirectorBP から削除する必要があります。関連付けられている関数は、[My Blueprint (マイ ブループリント)] パネルの [Functions (関数)] セクションにリストされています。

アクタが動的にプレイヤー ポーンにバインドされている場合、バインディングで使用するプレイヤー コントローラーを選択できます。[Dynamic Possession] で、[Resolve to Player Pawn] エンドポイントを選択します。バインディングを再度確認すると、[Payload (ペイロード)] セクションの [Player Controller Index (プレイヤー コントローラー インデックス)] で使用するプレイヤー ポーンを選択できるようになっています。

エディタで呼び出す
[Call In Editor (エディタで呼び出す)] を使用すると、動的バインディングをデバッグできます。アクタの動的バインディングが完了したら、[Call In Editor] オプション ([Sequencer] > [Dynamic Possession] > [Call In Editor] を右クリック) を有効にすることができます。この機能が有効な場合、割り当てられたエンドポイントはエディタ内の Play In Editor (PIE) の外部でトリガーされます。

このエンドポイントを呼び出すことで加えられた変更は、現在のレベルまたはアセット内にすべて保存されることがあります。
動的バインディングをクリアする
動的バインディングを削除するには、次の手順を実行します。
- 動的バインディングを行ったアクタを右クリックします。
- [Dynamic Possession] を選択します。
- [Endpoint] のドロップダウンから、[Clear (クリア)] を選択します。
これによって、動的バインディングが削除されますが、関連付けられているブループリントは削除されません。
動的バインディングの再バインディング
動的バインディングを行ったアクタを別のエンドポイントに再バインドするには、以下の手順を実行します。
- アクタを右クリックします。
- [Dynamical Possession] を選択します。
- [Endpoint] のドロップダウンから、[Rebind To (再バインド先)] を選択し、使用するエンドポイントを選択します。

UMG および動的バインディング

ボタンに動的バインディングを作成しています。注:ブループリントは事前に作成済みのため、ブループリント ノードを必要に応じて変更します。
Unreal Motion Graphics UI Designer (UMG) アセット用の動的エンドポイントの作成は、その他のアクタのバインディングと同様ですが、1 つだけ違いがあります。それは、UMG アセットを使用して動的バインディングを作成すると レベル シーケンスの Director ブループリント が開かれないということです。このプロセスにより、UMG アセット内部に関数が作成されます。これは、アセットとすでに関連付けられている UI ブループリント グラフ があるためです。また、非 UMG アセットとは異なり、動的バインディングを作成するプロセスでは、関連付けられているブループリントは自動的に開かれません。

動的バインディングの演習
このチュートリアルは、あるアクタを別のアクタに動的にバインドする方法と、[Call In Editor] を使用して ビューポート で発生する動的バインディングを確認する方法の例です。
- 新規の空のレベルを作成します。
- キューブ および 球体 を、[Shapes (形状)] メニューから [Quickly add to the project (プロジェクトにすばやく追加)]:[Shapes] > [Cube (キューブ)] および [Shapes] > [Sphere (球体)] を選択して作成します。
- レベル シーケンス を作成し、キューブをそれに追加します。
- シーケンサー の空いている場所で右クリックします。
- [Actor To Sequence (シーケンサーへのアクタ)] を選択します。
- Find the Cube は、シーケンスに追加するのに利用可能なアクタです。
- アウトライナー から 球体 を選択し、[Actor Tag (アクタ タグ)] を 球体 に追加します。
- [Details] パネル で、[filter by Actor (アクタごとにフィルタ)] オプションをクリックします。
- [Tags (タグ)] セクション ([Advanced (詳細)] の下) で、追加 ([+]) ボタンをクリックし、[Array element (配列要素)] を追加します。
-
タグの名前として「sphere」を入力します。このアクタ タグを、シーケンス タグと混同しないようにしてください。このプロセスは、ブループリント ノードによって後から選択されるアクタ タグを使用します。
- キューブに短いアニメーションを追加します (たとえば、Location X で 30 フレームにわたってキューブが動くようにアニメートします)。これはどのような動きにすることもでき、アクションの動的バインディングを後から確認できます。
- キューブに動的バインディングを作成する:
- シーケンサーで [Cube] を右クリックし、[Dynamic Possession] を選択します。
-
- *[Endpoint] > [Create New Endpoint (新規エンドポイントを作成)] を選択します。これによって、レベル シーケンスの Director ブループリント が開き、Cube Dynamic Binding および Return Node** の 2 つのノードが配置されます。
- 新規作成されたブループリントを変更し、すべてのアクタを選択したタグ (「sphere」) で取得し、球体でキューブを置き換えられるようにします。
- Get All Actors with Tag ノードおよび Get (a copy) ノードを追加します。
- Cube Dynamic Binding ノード の 実行出力ピン を Get All Actors with Tag ノード の 実行入力ピン に接続します。
- [Get All Actors with Tag] ノード の [Tag] フィールド に「sphere」と入力します。
- Get All Actors with Tag ノード の Out Actors ピン を Get (a copy) ノード の 配列ピン に接続します。これにより、任意のアクタの最初のインデックス (0) が actorTag の「sphere」で置き換えられます。
- Get All Actors with Tag ノード の 実行ピン を Return Node ノード の 実行ピン に接続します。
- Return Node で、構造体 を分割する必要があります。Return Value ピン を右クリックし、[Split Struct Pin (構造体ピンを分割)] を選択します。これによって Return Value Is Possessed Object が公開され、これによって球体の所有が可能になります。
-
最後に、Get (a copy) ノード の 出力ピン を Return Node ノード の Return Value Object ピン を接続します。
- カスタマイズしたブループリントを コンパイルおよび保存 します。
- シーケンサー に戻り、キューブを右クリックし、[Dynamic Possession] から [Call In Editor] を有効にします。
- シーケンサーで再生ヘッドをスクラブ再生し、キューブが球体に置き換えられ、アニメーションも球体のものになっていることを確認します。
