【UE5】Niagaraエフェクトからブループリントのイベントを呼び出す

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