クラスタ イベントを使用する

nDisplay クラスタにイベントを送信する方法、およびブループリントでこれらのイベントに応答する方法について説明します。

Windows
MacOS
Linux

クラスタ イベントは、nDisplay クラスタのすべてのノードにイベントに同時に応答させる手段です。

  1. クラスタ イベントはクラスタ内でノードから生成します。または外部アプリケーションのマスター ノードにクラスタ イベントを送信することで生成します。ブループリントからクラスタ イベントを発行する または 外部アプリケーションからクラスタ イベントを発行する を参照してください。 nDisplay クラスタが稼働している場合は、nDisplay Launcher アプリケーションを使用して、新しいクラスタ イベントを送信してクラスタ ノードに応答させることもできます。「nDisplay Launcher からクラスタ イベントを発行する」 を参照してください。

  2. クラスタのマスター ノードがクラスタ イベントを受信すると、厳密に同じフレームの各ノードでそのクラスタ イベントが発生するように、クラスタの各ノードにそのクラスタ イベントがプロパゲートされます。

  3. Unreal Engine アプリケーションのブループリント ロジックまたは C++ ロジックで、これらのクラスタ イベントを検出するようにリスナーを設定し、プロジェクトに必要なあらゆるゲームプレイ ロジックでクラスタ イベントに応答できるようにします。「ブループリントでクラスタ イベントに応答する」 を参照してください。

クラスタ イベントの構造

各 nDisplay クラスタ イベントは、次の複数のプロパティで構成されている場合があります。

設定

Name (名前)

string

Type (型)

string

Category (カテゴリ)

string

Parameters (パラメータ)

オプションのキー/値のペアのマップ。ここで、キーと値はどちらも string。

これらの各プロパティで送信するデータの種類と、リスナーがそのデータを解釈する方法をプロジェクトで決定するのはユーザーです。

ブループリントでクラスタ イベントとやり取りするときは、Make DisplayClusterClusterEvent ノードおよび Break DisplayClusterClusterEvent ノードを使用して、クラスタ イベントを作成および分解します。次に例を示します。

A Cluster Event in Blueprint

C++ では、または独自のアプリケーションからクラスタ イベントを発行する場合は、JSON を使用して同じ構造を表します。例えば、上記のクラスタ イベントに相当する JSON は次のとおりです。

{"Name":"activate","Type":"command","Category":"particles","Parameters":{"rate":"200","speed":"3"}}

ブループリントからクラスタ イベントを発行する

プロジェクトでブループリント クラスからクラスタ イベントを発行するには、次の手順を実行します。

  1. DisplayCluster Module API (「ブループリント API」を参照) を取得して、[Cluster (クラスタ)]Emits cluster event (Interface Call) 関数を呼び出します。このノードによりクラスタ イベントのマスター ノードへの出力が開始されます。これにより、クラスタ内のすべてのノードにクラスタ イベントがプロパゲートされます。

    Emits cluster event

  2. デフォルトでは、ゲームプレイ ロジックでこのブループリント ノードを評価する Unreal Engine アプリケーションのすべてのインスタンスがこのクラスタ イベントを起動します。このブループリント グラフでクラスタ内の多くの異なるノードが評価されると、クラスタ イベントの複数のコピーが生成される可能性があります。 クラスタ イベントの複数のコピーが生成されないようにするには、Emits cluster event ノードで [Master Only (マスターのみ)] ブール値を設定します。このボックスをオンすると、マスター ノードのみでクラスタ イベントが発行されます。その他すべてのマスター以外のクラスタ ノードが同じブループリント グラフを評価しても、イベントは発行されません。

    Master Only

  3. Emits cluster event ノードの [Event (イベント)] ポートから左にドラッグして、[Make DisplayClusterClusterEvent] を選択します。 Make DisplayClusterClusterEvent

  4. Make DisplayClusterClusterEvent ノードの設定で、[Name (名前)][Type (型)]、および [Category (カテゴリ)] の文字列値を使用してクラスタ イベントを設定します。クラスタ イベントと一緒に任意のキー/値データを渡す必要がある場合は、それらのキーと値のマップを [Parameters (パラメータ)] 入力に渡すこともできます。

    Creating and emitting a Cluster Event

  5. ブループリントを コンパイル して 保存 します。

次回プロジェクトを再パッケージ化して、nDisplay クラスタを再起動すると、このブループリント コードにより、設定したクラスタ イベントが起動されます。ブループリント コードの他の場所でこのイベントに応答するには、「ブループリントでクラスタ イベントに応答する」を参照してください。

外部アプリケーションからクラスタ イベントを発行する

nDisplay クラスタを起動すると、マスター ノードにより特定のローカル ポートで受信クラスタ イベントのリッスンが開始されます。そのポートに接続してメッセージを送信することで、ネットワーク内の他のすべてのコンピュータで実行されている他のアプリケーションから nDisplay システムに新しいクラスタ イベントを発行できます。

このメッセージは、発行するクラスタ ノードごとに、次の規則に従う必要があります。

  • 先頭の 2 バイトでメッセージの残りの部分の全長を指定する必要がある。

  • メッセージの残りの部分は、JSON オブジェクトとして表されるクラスタ イベントのコンテンツである必要がある。

例えば、名前が "quit" で型が "command" のクラスタ イベントを発行するには、次の手順を実行します。

  1. クラスタ ノードの値を含む JSON 文字列を作成します。この場合、JSON 文字列は次のようになります。

    {"Name":"quit","Type":"command","Category":"","Parameters":{}}

    NameType、および Category の各フィールドは必須ですが、Parameters フィールドは省略できます。

  2. JSON 文字列の長さ (この場合は、62 文字) を取得して、その長さを nDisplay マスター ノードに送信します。

  3. JSON 文字列自体を nDisplay マスター ノードに送信します。

メッセージを受信して処理できる場合、マスター ノードは次の同一の規則に従ってアプリケーションに応答を送り返します。

  • 先頭の 2 バイトで応答メッセージの残りの部分のバイト長を指定する。

  • メッセージの残りの部分は、通常 Error という 1 つのフィールドを含む JSON オブジェクトである。このフィールドの値は、メッセージが正しく処理されたかどうかを示すエラー コードです。

    コード

    意味

    0

    エラーは発生していません。メッセージが正常に処理されました。

    2

    送信したクラスタ イベントに 1 つ以上の必須フィールドがありません。値が空である場合でも、NameCategory、および Type の各フィールドが含まれていることを確認してください。

    255

    認識できないエラーが発生しました。

デフォルトでは、マスター ノードはポート 14003 でクラスタ イベントをリッスンします。このデフォルトは、nDisplay コンフィギュレーション ファイルで変更できます。「Changing nDisplay Communication Ports」を参照してください。

プロジェクトのブループリント コードでこれらのクラスタ イベントに応答するには、「ブループリントでクラスタ イベントに応答する」を参照してください。

nDisplay Launcher からクラスタ イベントを発行する

nDisplay クラスタの実行中は、nDisplayLauncher アプリケーションを使用して、マスター ノードにいつでもクラスタ イベントを送信できます。

  1. 通常どおり、nDisplay クラスタを起動します。

  2. [Cluster events (クラスタ イベント)] タブに切り替えます。このタブを使用してクラスタ イベントを設定し、設定したイベントを自分のクラスタにオンデマンドで送信します。

  3. [New (新規)] をクリックして、このタブのリストに新しいクラスタ イベントを追加します。 Cluster events tab

  4. [Cluster event editor (クラスタ イベント エディタ)] ウィンドウを使用して、クラスタ イベントの [Name (名前)][Type (型)]、および [Category (カテゴリ)] の値を設定します。

    Settings in the Cluster event editor

  5. また、キー/値のペアをクラスタ イベントのリストまたはパラメータに追加することもできます。[Argument (引数)] フィールドでキーを設定し、[Value (値)] フィールドで値を設定して、[+] ボタンをクリックします。

    Parameters in the Cluster event editor

    作成後にパラメータを変更する必要がある場合は、右側のリストでそのパラメータを選択してから [-] をクリックすると削除できます。その後、必要な設定を使用して新しいパラメータを再作成します。

  6. [Apply (適用)] をクリックして、新しいクラスタ イベントを保存します。

  7. [Cluster events (クラスタ イベント)] タブに戻り、リストでクラスタ イベントを選択して、[Send (送信)] をクリックします。 Send the Cluster Event

    [Modify (変更)] をクリックして、選択したクラスタ イベントを再度開き、値を編集することもできます。

  8. nDisplayLauncher の下部にあるログ出力パネルで、マスター ノードからの応答を確認します。 clusterevent-emit-launcher-response.png

プロジェクトのブループリント コードでこれらのクラスタ イベントに応答するには、「ブループリントでクラスタ イベントに応答する」 を参照してください。

ブループリントでクラスタ イベントに応答する

クラスタ イベントを nDisplay ネットワークに送信するための上記のいずれかの方法を設定したら、送信されたクラスタ イベントを検出して、何らかの方法で応答できるように、ブループリント (または C++) のゲームプレイ ロジックを設定する必要があります。このためには、リスナー (DisplayClusterClusterEventListener インターフェースを実装するクラス) を作成して登録する必要があります。nDisplay API から Add Cluster Event Listener 関数を呼び出してリスナーを登録し、Event On Cluster Event ノードを使用してクラスタ イベントを検出して応答します。

例えば、新しいブループリント クラスを作成して、そのクラスをリスナーとして登録するには、次の手順を実行します。

  1. コンテンツ ブラウザ で右クリックして、[Create Basic Asset (基本アセットの作成)] > [Blueprint Class (ブループリント クラス)] を選択します。 Create Blueprint Class

  2. 親クラスとして [Actor (アクタ)] を選択します。

    Actor

  3. コンテンツ ブラウザ で新しいリスナー クラスの名前を入力します。

    Actor

  4. レベルのビューポートでクラスをドラッグして、レベルにドロップします。 Drag and drop the Blueprint into the Level

  5. 新しいブループリント クラスをダブルクリックして、編集します。

  6. ツールバーで、[Class Settings (クラス設定)] をクリックします。 Class Settings

  7. [Details (詳細)] パネルで、[Interfaces (インターフェース)] > [Implemented Interfaces (実装済みインターフェース)] の設定を確認して、[Add (追加)] をクリックします。

    Add interface

  8. リストで DisplayClusterClusterEventListener インターフェースを確認して選択します。 DisplayClusterClusterEventListener

  9. ツールバーの [Compile (コンパイル)] をクリックしてクラスをコンパイルします。

  10. [Event Graph (イベント グラフ)] タブで、次のグラフを設定してリスナーを登録します。

    これを設定するには、次の手順を実行します。

    1. Begin Play Event ノードの出力を右にドラッグして、[N Display (N ディスプレイ)] > [Get DisplayCluster Module API] を選択します。

    2. Get DisplayCluster Module API ノードの [Out API (出力 API)] ポートを右にドラッグして、[Display Cluster (ディスプレイ クラスタ)] > [Cluster (クラスタ)] > [Add cluster event listener (Interface Call)] を選択します。

    3. 最後に、Add cluster event listener ノードの [Listener (リスナー)] ポートを左にドラッグして、[Variables (変数)] > [Get a reference to self] を選択します。

  11. また、不要になった場合は、作成した各リスナーを破棄することをお勧めします。例えば、Blueprint アクタが破棄された場合は、リスナーを破棄することができます。

    これを設定するには、次の手順を実行します。

    1. [Event Graph (イベント グラフ)] を右クリックして、[Add Event (イベントの追加)] > Event Destroyed ノードを選択します。

    2. Event Destroyed ノードの出力を右にドラッグして、[N Display (N ディスプレイ)] > [Get DisplayCluster Module API] を選択します。

    3. そのノードの [Out API (出力 API)] ポートを右にドラッグして、[Display Cluster (ディスプレイ クラスタ)] > [Cluster (クラスタ)] > [Remove cluster event listener (Interface Call)] を選択します。

    4. 最後に、Remove cluster event listener ノードの [Listener (リスナー)] ポートを左にドラッグして、[Variables (変数)] > [Get a reference to self] を選択します。

  12. [Event Graph (イベント グラフ)] の他のエリアで、[Add Event (イベントの追加)] > [N Display (N ディスプレイ)] > [Event On Cluster Event] を選択して、Event On Cluster Event ノードを追加します。nDisplay クラスタでクラスタ イベントが発生するたびに、このイベントがトリガーされます。 このイベントに割り当てられた設定とパラメータを確認し、これらに基づいて、ブループリトで実行する必要のあるアクションを特定できるようにすることをお勧めします。このためには、Event On Cluster Event ノードの [Event (イベント)] ポートを右にドラッグして、Break DisplayClusterClusterEvent を選択します。 例えば、次のグラフでは単に各クラスタ イベントの [Name (名前)] の値がスクリーンに出力されます。

  13. ブループリント クラスを コンパイル して 保存 します。

次回クラスタでクラスタ イベントが任意のソースから発行されると、そのクラスタ イベントの名前がスクリーンに出力されます。

Select Skin
Light
Dark

新しい Unreal Engine 4 ドキュメントサイトへようこそ!

あなたの声を私たちに伝えるフィードバックシステムを含め、様々な新機能について開発をおこなっています。まだ広く使える状態にはなっていないので、準備ができるまでは、ドキュメントフィードバックフォーラムで、このページについて、もしくは遭遇した問題について教えていただけると助かります。

新しいシステムが稼働した際にお知らせします。

フィードバックを送信