1.Niagara Systemの作成
コンテンツブラウザを右クリックから "FX > Niagara System" を選択します。

視覚的に分かりやすいように Fountain エミッターを追加しておきます。

2.パラメーターの追加
パラメーターの "User Exposed" から Object型 のパラメーターを追加します。

"Owner" という名前にしておきました。

3."Export Particle Data to Blueprint"の追加
"Particle Update" に "Export Particle Data to Blueprint" を追加します。

追加したモジュールを選択し、"Callback Handler Parameter" に上記で追加した "Owner" を指定します。

また、"Condition To Export Data" にもチェックを入れておきます。

※ 各パラメーターの説明
| パラメーター名 | 説明 |
|---|---|
| Condition To Export Data | この条件が True の時にイベントが送信されます。 |
| Delay Between Data Exports | イベントが送信された後、次のイベントを送信できるまでの秒数。 |
| Vector to Send (As Struct Position) | 送信されるデータ。(各スプライトのPosition) |
| Vector To Send (As Struct Velocity) | 送信されるデータ。(各スプライトのVelocity) |
| Float To Send (As Struct Size) | 送信されるデータ。(各スプライトのSize) |
| Callback Handler Parameter | イベントが送信されるオブジェクト。 |
| GPUAllocation Mode | GPU割り当てモード。 |
| GPUAllocation Fixed Size | "GPUAllocation Mode" が "Fixed Size" の場合の固定数。 |
| GPUAllocation Per Particle Size | "GPUAllocation Mode" が "Per Particle" の場合に参照される値。 この値 * パーティクルの数、フレームごとに書き込まれるアロケータが確保されます。 最大値はコンソール変数の "fx.Niagara.NDIExport.GPUMaxReadbackCount" でクランプされます。 |
4.受信側のブループリントを作成
コンテンツブラウザで右クリックからブループリントを作成します。
元となるクラスはなんでも大丈夫ですが、今回はアクターを選んでおきます。

"Niagara Particle System Component" を追加します。

追加した Niagara Component の詳細パネルから送信側の Niagara System を指定します。

Begin Play で追加した Niagara Component の "Owner" パラメーターに対して自身を渡してあげます。

5.受信用インターフェイスの追加
"Class Settings" から "Niagara Particle Callback Handler" を追加します。

追加された "Receive Particle Data" を右クリックし、"Implement event" を選択します。

Niagara System の "Condition To Export Data" が true を返す間、"Receive Particle Data" のイベントが呼び出されます。
今回は常に true なので毎フレーム呼び出されます。
引数の "Data" にはパーティクルのごとのデータが格納されています。デフォルトでは、Size と Velocity は0になります。

以下のようにパーティクル全てに青いラインを繋ぐように組んでみました。


応用編① - 指定のパラメーターを送る
イベントで送れるパラメーターは、Position, Size, Velocity の3つですが、中身の値は自由に指定可能です。
他のパラメータと同様にパラメーターの「▽」から任意のパラメーターや計算した結果を渡すことができます。

float か Vector かの選択肢しかありませんが、他の型でもfloat型に変換可能な型であれば渡せます。(Vectorもfloat3つなので3種類格納できますね。)
※ 例えば bool であれば "Make Custom Float from Bool" など

応用編② - エフェクト衝突時にイベントを呼び出す
"Particle Update" に "Collision" モジュールを追加します。

"Condition To Export Data" に "CollisionValid" を指定することで衝突時にイベントが発生するようになります。

また、Velocity パラメーターに "CollisionParticleWorldPosition" を指定することで衝突時の座標を渡すことができます。

衝突座標にスフィアを出すように組んでみました。


応用編③ - 指定した秒数でイベントを送信する
追加で Bool型のパラメーターを追加します。

若干複雑ですが画像のように組みます。

Boolean and Operation で2つの条件が true の場合、イベントが送信されるようにしています。
| 条件1 | エミッターの経過時間が2秒を超えているか |
|---|---|
| 条件2 | "SendEvent" が false かどうか |
受信側では "SendEvent" パラメーターを true にするように組んでいます。(そうすることで一度のみ送信されるように)

2秒経過した時に一度のみイベントが送信されました。

UE Version : 5.2.0