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