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