ブループリント スクリプトと C++ を使用して、アクタ間で情報を交換、共有する方法がいくつかあります。このページでは、さまざまなアクタ通信方法と、それぞれの方法の要件および一般的なユースケースの概要を説明します。
アクタ通信方法ごとに詳細な「クイック スタート ガイド」へのリンクも用意されています。
直接通信
アクタの直接通信は、レベル内でブループリント アクタ間の情報を共有する方法として最も一般的です。
この方法では、作業中のアクタから情報にアクセスするために、ターゲットとなるアクタ クラス ブループリントへの参照が必要です。この通信方法では、作業アクタとターゲット アクタ間で 1 対 1 の関係を使用します。
使用するタイミング
レベル内に特定のアクタ クラス ブループリントへの参照があり、その特定アクタ クラス ブループリント内で情報を共有、または機能をトリガーする必要がある場合に、この通信方法を使用します。
例
アクタ上でイベントをトリガーする。
レベル内でアクタから情報を取得する。
ブループリント クラスでキャスティングする
キャスティングとは、アクタ クラス ブループリントへの参照を取得して、それを別のクラスに変換しようとする際、一般的に使用される通信方法です。変換が成功すると、直接通信 を使って情報や関数にアクセスすることができるようになります。
この方法では、**キャスティング**を使用して特定のクラスに変換しようとするため、レベル内のアクタ クラス ブループリントへの参照が必要になります。この通信方法では、作業アクタとターゲット アクタ間で 1 対 1 の関係を使用します。
使用するタイミング
アクタ クラス ブループリントへの参照があり、そのアクタ クラス ブループリントが情報にアクセス可能な特定のクラスであるかどうかをチェックしたい場合に、この通信方法を使用します。
例
インターフェース
インターフェース (UInterface) は、さまざまなクラスによって実装可能な共通の動作を定義します。この通信方法により、さまざまなアクタ クラス ブループリント上で同じ種類の関数を実装するプロセスを簡素化することができます。
この方法では、共通の方法にアクセスするために各アクタにインターフェースを実装する必要があります。インターフェース関数を呼び出すためにアクタ クラス ブループリントへの参照も必要です。この通信方法では、作業アクタとターゲット アクタ間で 1 対 1 の関係を使用します。
使用するタイミング
この方法は、さまざまなタイプのブループリント アクタに適用できる共通の関数を作成したい場合に使用します。
例
プレイヤーが操作したときに各アクタ クラス ブループリントが別々の動作をするようなインタラクションシステムを作成する。例えば、プライヤーが操作するとドア アクタが開き、同じ操作でライト アクタがアクティブになる場合。
レベル内のさまざまなアクタにダメージを与える。各アクタ クラス ブループリントは、与えられたダメージに対して別々の反応をする。例えば、壁アクタはダメージを受けると破壊され、ドア アクタは開く。
デリゲート
デリゲートは、型安全な方法でアクタ クラス ブループリント内の方法を呼び出すことができます。ダイナミックにバインドし、あるアクタが「リスニング」している別のアクタにトリガーしてイベントを通知するような関係を形成することができます。
注記:詳細については、「
[デリゲート](programming-and-scripting/programming-language-implementation/delegates-and-lamba-functions-in-unreal-engine)
」を参照してください。
使用するタイミング
単独イベントで複数アクタ クラス ブループリントに影響を与えたいときに、この通信方法を使用します。
例
ブループリント クラス参照テーブルと通信する
通信タイプ
|
使用するタイミング
|
要件
|
例
|
直接通信
|
レベル内のアクタの特定インスタンスと通信する場合
|
レベル内のアクタへの参照が必要
|
レベル内の特定アクタ上でイベントをトリガーする
|
キャスティング
|
アクタのプロパティにアクセスするために、アクタが特定のクラスであることを検証したい場合
|
目的のアクタ クラスにキャスティングするには、レベル内のアクタへの参照が必要
|
同じ親クラスを共有する子アクタの特定の関数にアクセスする
|
インターフェース
|
さまざまなアクタ クラスに同じ関数を追加する場合
|
レベル内のアクタへの参照、アクタへのインターフェース実装が必要
|
さまざまなタイプのアクタにインタラクション動作を追加する
|
イベント ディスパッチャー
|
1 つのアクタから多数のアクタにイベントをトリガーする場合
|
イベントに反応させるには、アクタのサブスクライブが必要
|
イベントがトリガーされたことを、さまざまなタイプのアクタに通知する
|