ブループリント通信の使用方法

ブループリント通信の様々な使用方法の概要

Windows
MacOS
Linux

ブループリントの作業中にブループリント同士で情報を渡したり共有するためには ブループリント通信 という形式を使います。ニーズに応じて数種類の通信を使い分けることができます。このページでは、最も一般的な方法を説明し、サンプル使用例のリンクを紹介します。

ダイレクト ブループリント通信

2_9.png

ダイレクト ブループリント通信 は、非常に一般的な通信方法であり、任意のポイントで2 つの Blueprint アクタに対話させた場合に優れた手段です。このタイプの通信は常に 1 対 1 です。つまり、あるブループリント (Working Blueprint (作業ブループリント)) が、別のブループリント (Target Blueprint (ターゲット ブループリント)) にアクセスするリクエストをします。ダイレクト ブループリント通信の最も簡単な使用方法は、公開されているオブジェクト 変数 を通してターゲット ブループリントを参照し、次に使用したいブループリント インスタンスを指定するものです。

詳しい情報については ダイレクト ブループリント通信 をご覧ください。

いつ使用するのか

ダイレクト ブループリント通信 を使うケースを紹介します。

  • レベルに 2 つアクタが存在し、それらをお互いに通信させたい

    • レベル内のスイッチとインタラクションすることで特定のドアを開いたり、特定のライトを点灯します (それぞれ別のブループリント)。

セットアップ方法については、 ブループリント キャストのセットアップ方法 をご覧ください。

イベント ディスパッチャー

OpenDoorEventDispatch.png

イベントディスパッチャー はイベントを発行したリッスン中の他のブループリントに指示を出すのに最適です。イベントを発行すると、これらのリッスン中のブループリントが応答し、希望する動作を個々に実行できます。

例えば、キルされた時に "OnDied" イベント ディスパッチャーを呼び出すボスがゲーム内にいたとします。ボスがキルされたという "OnDied" 通知を取得すると実行されるキャラクター (祝う人)、レベル内のドア (開いている)、HUD (UI メッセージで点滅する) など、他のブループリント内で "OnDied" event を バインド できます。

詳しい情報については イベント ディスパッチャー をご覧ください。

いつ使用するのか

以下のような場合に、イベントディスパッチャー を使用します。

  • キャラクター ブループリントから Level ブループリントに通信したい場合

    • プレイヤー キャラクターがレベルアップし、以前にロックしたエリアを開けたい場合

    • プレイヤー キャラクターが、レベルで何かを行うアクション ボタンを押した場合

  • スポーンしたアクタが何かを行った場合にイベントを発行したい場合

    • ボスをスポーンし、ボスがキルされ、その結果ワールドで報酬がスポーンするときにイベントが発行する場合

    • レベルでアイテム (武器、ヘルスなど) をスポーンし、ピックアップされた場合にアイテムとキャラクターに通知する場合

セットアップ方法については、Setting Up Event Dispatchers をご覧ください。

ブループリント インターフェース

InterfaceNodes.png

ブループリント インターフェース (略して インターフェース)では、ある特有の機能性を共有する複数タイプのオブジェクトのインタラクションについて共通のメソッドが可能になります。 例えば、武器で狙撃されてダメージを受けるといったある特定の共通項がある車や木などの全く異なるタイプのオブジェクトを持つことができます。

OnTakeWeaponFire 関数を含む ブループリント インターフェース を作成し、車と木の両方にそのブループリント インターフェースを実装することで、 車と木を同じように扱うことが可能になり、いずれかが撃たれた時に OnTakeWeaponFire 関数を呼び出して、異なる反応をさせることができます。

ブループリント インターフェースは、契約書のようなものだと考えると分かりやすいかもしれません。この契約書は、「このインターフェースを実装すれば、このような特定の関数の実装を約束し、私が呼び出したらそれらに反応する」ことを謳っています。 インターフェースには複数のブループリントを実装できますが、呼び出しの対象のみ反応することができます (その他のものは呼び出しを無視します)。例えば、武器の話に戻ると、壁はダメージに反応してほしくないことでしょう。そのため、OnTakeWeaponFire とのインターフェイスは実装していないので呼び出しを無視します。

詳細は、ブループリント インターフェースの実装 を参照してください。

いつ使用するのか

以下は ブループリント インターフェース が最善の通信手段となりうるケースです。

  • 似ているが呼び出されると異なって実行する機能が複数のブループリントにある場合。

    • プレイヤーはフレームスロワー (火災放射器) を持っており、使用すると ElementalDamage というイベントを発行する場合。Snowman ブループリントが雪だるまを溶かす一方で、Tree ブループリントが ElementalDamage を呼び出し木を燃やす場合。

    • プレイヤーが "use" ボタンを持ち、ボタンを押すとドアが開く、ライトをオフにする、アイテムをピックアップするなどを行う場合。

    • 敵がプレイヤーのヘルスに応じて変化し実行する特殊能力を持つ場合。

セットアップ方法については、ブループリント インタフェースのセットアップ をご覧ください。

ブループリントのキャスティング

Event6.png

ブループリント通信でもう 1 つ共通している形式は、Cast ノードの使用です。Cast ノードを使う場合、オブジェクトに「そのオブジェクトの特別版ですか」、もしそうならアクセスさせてください、そうでないなら私の要求を拒否してくださいと質問するだけです。

例えば、プレイヤー キャラクターがゲーム内を飛ぶことができる Flying Character ブループリントという特別な Character ブループリントを作成したとします。Get Player Character を使ってプレイヤー キャラクターの移動コンポーネントにアクセスし、位置や回転の設定など一般的な方法でプレイヤーに影響を与えることができます。Character ブループリントは飛び方について知らないので、飛ぶ機能へのアクセスはありません。Flying Character ブループリントのみが飛ぶことについて知っています。このインスタンスでは、プレイヤー キャラクターと Cast To Flying ブループリントを取得することにより、飛ぶ関数へのアクセスが確保されます。

プレイヤー キャラクターが Flying Character ブループリントではなくて完全に異なるタイプの Character ブループリントを使用している場合、Flying ブループリントを使っていないので Cast To Flying ブループリントを実行すると失敗し、飛行コマンドへのアクセスおよび実行ができません。

詳しい情報については キャスティング をご覧ください。

いつ使用するのか

ブループリント キャスティング 使用例をいくつか紹介します。

  • 別のブループリントの特別なバージョンにアクセスしたい場合。

    • キャラクターが炎の中を歩くとヘルス値を激減させる場合。

      • 特定の Character ブループリントをキャストしてヘルス値にアクセスし変更する場合。

    • キャラクターが死亡し、リスポーンする必要がある場合。

      • 特定の Game Mode ブループリントをキャストして、リスポーン スクリプトを実行する場合。

  • 同じクラスの複数のブループリントにアクセスして同じ方法で全部変更したい場合。

    • レベルにいくつか照明があり、イベント発生時に一斉に点灯、消灯したい場合。

      • Light ブループリントにキャストして、消灯する機能を実行する場合。

  • 特定の子ブループリントにアクセスしたい場合。

    • Animal ブループリント (Cat、Dog、Bird など) がベースのブループリントが複数あり、そのひとつにアクセスしたい場合。

      • それぞれのブループリントと固有の機能にアクセスするために Cast to Cat、Cast to Dog、Cast to Bird を使いたい場合。

セットアップ方法については、Setting Up Blueprint Casts をご覧ください。

Tags
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback