UE4 NiagaraのAttributeとBlueprintでの取得について
はじめに
この記事はUnreal Engine 4 Advent Calender 2019その2の1日目の記事です。
概要
NiagaraのAttributeをBlueprintで取得してみる
この記事の内容
前提
- Unreal Engine 4.24 Preview 4を使用して確認したものとなっています。
- Niagaraは、ベータ版です。
今後、本記事の内容とは仕様などが異なる可能性があります。 - UE4.24 Preview 4は記事作成時点(2019/12/01)では、プレビュー版となります。
リリース版とは異なる挙動を起こす可能性があります。
1. Niagaraに対してBlueprintでは色々できる
Blueprint上にて、Niagaraに関する関数を調べてみると、
再生しているFXの停止、Niagara内のUser変数の上書きなど様々な関数が用意されています。
BlueprintのNiagaraに関するAPI Referenceは以下の公式ドキュメントにリスト化されています。
合わせて御覧ください。
docs.unrealengine.com
今回は、その1つであるAttributeの取得について取り上げてみます。
2. NiagaraのAttributeの取得をしてみる
NiagaraのAttributeってなんぞや?
取得する前に、「Attributeってなに?」という所から始めます。
NiagaraにおけるAttributeは、Niagaraが持つEmitterやParticleの変数群だと僕は認識しています。
EmitterがどういったAttributeを保持しているのかは、
Attribute Spreadsheet内でCaptureボタンを押すと、現在のAttributeをすべて列挙してくれます。
列挙されたAttributeを見てみると
現在のColor、SpriteSizeやPositionなど多くの情報が保持されています。
もちろん、自身で追加した変数などもAttributeとして、列挙されます。
Get Niagara Emitter X Attrib
このNiagaraの持つAttributeをBlueprintで取得することができるのが
Get Niagara Emitter X Attribたちです。
それらの関数は3種類しかありません。
- Get Niagara Emitter Float Attrib
- Get Niagara Emitter Vec3 Attrib
- Get Niagara Emitter Positions
※これらの関数は、NiagaraEmitter内のParticles.によってくくられた変数のみを返すようです。
最後のGet Niagara Emitter Positionsのみ取得する値は固定化されていますが、
その他は、指定したEmitterの持つParticles.と頭についた変数を配列で取得できます。
具体的には、下画像内の赤枠部分の変数が取得できます。
試しにPrintString
NiagaraSystemの用意
デフォルトのテンプレートの1つである
SimpleExplosionをNiagaraSystemとして作成し、使用します。
BlueprintでAttributeを取得するようにノードを作成する
用意したNiagaraComponentをTargetに
Get Niagara Emitter Float Attribによって
用意したNiagara System内のEmitterであるOmnidirectionalBurstからLifetimeを出力してみます。
NiagaraEmitterであるOmnidirectionalBurstのLifetimeは、指定数値間でランダムな値をセットされています。
そのため、出力結果は、バラバラな数値であるはずです。
実際に動かしてみるとしっかりバラバラな数値が出力されました!
実際にAttributeを取得してみて
これらの関数を使用すると
取得したPositionにNiagaraのSpriteSizeの大きさちょうどのCollisionを生成できたり
様々なことに活用できそうです!
3. 気になる点
さて、お気づきの方がいらっしゃるかもしれませんが、
今回、取り上げた3つのAttributeを取得する関数たち、
ドキュメントを覗いてみるとDebug用の物だったりします。
docs.unrealengine.com
プレイヤーキャラクターに対してインタラクティブなエフェクトを作成する場合など活用できそうなのですが、
Debug用らしいです。
一応、パッケージングして確認してみましたが、
作成したBlueprintは正しく動作していたので、どうしてDebug用となっているのか、気になる所です...
エフェクトありきのギミックなど、判定用Collision位置更新の使用にとても有用そうなので、
ぜひ活用したいところです...!
おわりに
最後までご覧頂き、ありがとうございました!
明日はcom04さんによる「始めの方だし何か緩いネタを」という内容です!
とても楽しみですね!!!