ブループリントでインターフェースを使用する
ブループリント インターフェースを使用すると、ある特有の機能を共有するタイプの異なる多数のオブジェクトの相互作用に 共通メソッドを使用することができます。つまり車や木など、狙撃されてダメージを受けるといったある特定の共通項を持つ、 まったく異なるタイプのオブジェクトを持つことができます。OnTakeWeaponFire 関数を格納するブループリント インターフェースを作成し、 車と木の両オブジェクトを作成したブループリント インターフェースへ実装することによって、 車と木を同タイプのオブジェクトとみなし、いずれかが撃たれた時に OnTakeWeaponFire 関数を呼ぶことができます。
インターフェースの追加
ブループリント インターフェースおよびネイティブ コード (C++) で定義されたインターフェースは、全ての ブループリント へ追加することができます。
-
メインの [レベル エディタ] ウィンドウから、プロジェクト内の Level ブループリント を開きます。
-
上部の ツールバー から [Class Settings (クラス設定)] ボタンをクリックします。
-
右側の [Details (詳細)] パネルで Interfaces カテゴリを見つけます。
-
[Add Interface (インターフェスを追加)] ボタンをクリックして、有効なインターフェースのリストを表示し、使用するインターフェースを選択します。
インターフェースを削除するには、それぞれの 実装済みインターフェース リストの横にある ボタンをクリックします。ブループリント インターフェースから通常のブループリント関数に移動することもできます。詳細は、 を参照してください。
インターフェース カテゴリ内の [Inherited Interfaces] セクションに、オブジェクトによって継承されたインターフェース (すなわち、現在のブループリントが派生したブループリントで実装されているもの) があれば 自動的にエントリされます。
インタフェース メンバの実装
インターフェースがブループリントへ追加されると、ブループリントは呼び出し時にアクションを実行するために インターフェースの関数を実装しなくてはいけません。実装は、EventGraph でインターフェース関数用に Event ノードを配置して行います。 Event ノードに接続したノードは、関数の機能の定義や実装を行います。
-
ブループリンの EventGraph で 右クリック をして、[Add Event (イベントを追加)] > [Event Example Function] の順に選択します
追加したいイベントのタイプを選択すると、そのイベントがグラフに追加されます。
-
Event の実行ピンに接続しているノードのネットワークを作成して機能を持たせます。
インターフェース関数の呼び出し
インターフェース関数は Interface Message ノードを使用して実行されます。 ターゲットがインターフェースを実装していないと失敗する点を除いて、通常のFunction Calls のような動作をします。
他のブループリント上でインターフェース関数を呼び出す
インターフェースは異なるブループリント間のコミュニケーションに役立ちます。単一のインターフェースからの関数はブループリント上に呼び出すことができます。これは以下の 2 つの基準が合致すると可能になります。
- 両ブループリントが必須の関数を伴って同一インターフェースを実装している時
- 呼び出し側のブループリントが、相手のブループリントのインゲームのインスタンス名を把握している時
イベントグラフ内に Interface Function ノードを作成する際、コンテキストメニューにしばしば 2 通りの関数がリスト表示されます。
[Call Function (関数呼び出し)] 配下にリストされている関数はローカルバージョンであり、このブループリント内のみで呼ばれることを覚えておくことが重要です。
[Interface Messages (インターフェース メッセージ)] 配下にリストされている関数は、同一インターフェースを実装している別のブループリントのインターフェースを介して関数を呼び出すようにつくられています。
ノード タイトルの下に、区別するためにラベルが配置されています。
ローカル バージョン | インターフェース メッセージ バージョン |
インターフェース メッセージ関数の呼び出しには、関数を呼び出している適切なブループリントのインスタンスの提供が必須となります。
この画像は、ターゲット入力値として別のブループリントを送信しています。これにより提供されたブループリント上で関数を呼び出します。このブループリントがインターフェースを実装していない場合、何も起こりません。
レベル内に存在するブループリントを指定するには、'アクタ' タイプのパブリック変数の作成が最適です。レベルエディタの [Details (詳細)] タブを使用して、その変数の値に適切なブループリントを割り当てます。
他の Level ブループリント上でインターフェース関数を呼び出す
インターフェースは Get Streaming Level ノードを使うことにより、サブレベル間での通信も可能にします。レベルをロードして有効しすれば、Interface Message がレベルのブループリント スクリプトによってターゲットとして呼び出されます。
インターフェース関数のオーバーライド
インターフェース関数の最も重要な側面の 1 つは、独自の実装を持たないため、インターフェースを実装する各ブループリントに対し個別に機能性を定義できることです。
インターフェース関数がブループリントによって実装されると、そのインターフェースの関数が [My Blueprint] パネルに表示されます。
その関数を ダブルクリック すると、ブループリントエディタで関数が開きます。この関数のローカル実装が表示されます。ここで定義される機能はすべて、ブループリント固有となります。このように、インターフェース実装済みの各ブループリントにカスタム機能を定義することができます。
例えばこの画像では、ブループリント内で開くと基本的なインターフェース関数があるのがわかります。現時点で関数は何もしません。
数値の比較や値の出力などを実行する簡単なネットワークを作成することができます。
関数がローカルで呼ばれると、浮動小数値を受け取りその値を 10 と比較して、結果として画面に boolean 値を出力します。