NiagaraEmitterの情報にBluerprintからアクセスする方法
UE4.25 以前のアクセス方法
UE4.24.3等ではGet Niagara Emitter XXでEmitterの情報にアクセスが可能でした
こちらはEmitter名を指定するだけなので非常にお手軽でした
しかし、UE4.25からはこれらのノードが廃止されています
そこで、UE4.25以降ではNiagara Emitterの情報をどのようにしてBluerprintから取得するのかという点について解説していきます
Niagara側の設定
data export用のModule作成
まずはFX -> Niagara Module Scriptから新規にModuleを作成します
名前はひとまず「NMS_ExportExample」としました
Niagara Module Scriptを作成したら先ずは忘れないように
「Expose to Library」にチェックを入れます
ここにチェックをしないと、Niagara Emitterから使用することができません
続いて、dataをexportするための「New Export particle data」を追加します
次に「Store Particle Data」を使用してDataを格納します
- Store Data : データを保持する条件です。
チェックを入れた場合は常時値を保持するようになります
条件式を加える例として、PaticleにCollision Moduleを追加してHitした時のみ位置情報を格納するなどの使い方が考えられます
Position, Size, Velocityは特別解説するようなこともないので、素直に値を入れてあげればよいです
今回の例では位置情報のみを使用するため、以下のように設定しました
しかし、これだけではMap Setしていないためエラーになってしまうので値を追加してあげます
Particle Attributesに新規にbool型の変数を追加し「StoreSuccess」と名付けました
名前はなんでもいいです
追加したAttributeをMapSetに追加して、StoreParticleDataの返り値を設定します
これでModule Scriptは完成です。
Niagara Systemの作成
新規にNiagara Systemを作成し、New system from selected emitter(s) を選択します
Emitterは「Omnidirectional Burst」を選択します
Emitter to Addから追加し、作成完了です
名前は「NS_Example」としました
NS_Exampleを開いて「Particle Update」に先程作成した
「NMS Export Example」を追加します
このままではCallback Handler Parameterに設定可能なParameterがないため、新規にParameterを追加する必要があります
Parametersの「User Exposed」に「Object」型のParameterを追加します
ひとまず「ExportHandler」と名付けました
名前はなんでもいいですが、後ほどBlueprintと連携する際にこの名前が必要になります
Object型のParameterを追加したことでNMS Export Exampleに設定可能なHandlerができました
「NMS Export Example」を選択し、Callback Handler Parameterに「User.ExportHandler」を設定します
これでNiagara Emitter側の設定は完了です
おまけとしてCollisionを追加しておきました
後のデバッグでの挙動確認用です
Blueprint側の設定
長かったですが、ここまできてようやくBlueprintからのEmitterの値の取得が可能になります。
「Actor」を継承したBlueprintを作成し、「BP_ExampleActor」と名付けました
忘れないうちにLevel上の適当な位置に配置します
「BP_ExampleActor」を開くと、まずはComponentの追加で
「Niagara Particle System」を追加します
追加したComponentを選択し、先程作成した「NS_Example」を割り当てます
続いてNiagara Systemの「ExportHandler」の初期化を行います
NiagaraのComponentから「Set Niagara Variable(Object)」を選択し
「BeginPlay」から呼び出し、図のように繋ぎます
これで「NS_Example」の「ExportHandler」に対して「BP_ExampleActor」を割り当てることができました
次にNiagaraのCallback関数の呼び出しを行います。
「Class Setteings」を選択して
Interfaceの追加から「Niagara Particle Callback Handler」を選択します
MyBlueprintタブのInterfacesに「Receive Particle Data」が追加されていれば設定ができています
続いて「Receive Particle Data」から「Implement Function」を選択して
Receive Particle Dataに処理を追加します
Niagara EmitterのPosition情報を取得してDebug用のSphereを描画してみました
これで値が正しく取得できていることが確認できました
まとめ
今回の作例ではNiagara Module ScriptからPositionにのみ値を設定したため
Position以外には値が割り当てられていません
逆にModule Script内で処理を書くことで様々なカスタムした値の割り当てが可能です
また、ModuleのStore Dataフラグの工夫次第でヒット判定など様々な条件の判定が可能です
ここまで読んでいただいた方はよく分かったと思うのですが
UE4.24に比べてUE4.25でのNiagara Emitterの情報を取得するのが大変手間です
他にもっとスマートな方法を知っている方はTwitter等で教えてもらえると嬉しいです。以上です。
おまけ
この機能を使ってこんなゲームを作って簡単な解説記事を書きました
www.youtube.com
以上です