【Niagara】飛び道具エフェクト系モジュールの構築1
VerはUE4.27です
【初めに】
エフェクトの制作そのものというよりも
モジュール側の制御となります
長くなりそうなので記事は分ける想定です。
また、今回はスクラッチパットで作ったものを、モジュールに変換するつくり方で作ります。
【下準備】
空のシステムから作成でNiagaraシステムと
Emptyからエミッターを生成します。
今回はモジュールを作る目的なので、空の状態から作っていきます。
また、レベルに作ったNiagaraシステムも配置しておきます(置いておくと確認しやすくなります)
また、3Dモデルの方が都合がいいので、今回はこのようなモデルを使います。
同じである必要はありませんが、原点が先端に来るようにし
根元がZのマイナス軸になるようにしてください。
どの軸でも対応できるやり方もありますが、それは次以降の記事で触れていきます。
【Niagaraシステムの下準備】
まずはNiagaraシステムに、作ったエミッターを入れます
最終的にはエミッターに入れたほうがいいのですが、システムに入れてから、システム側で色々と組んでいきます。
最初から入っているモジュールは「Emitter Stare」と「Particle State」だけ残して他は不要です。
次に発生自体をさせる為の「Spawn Rate」「Mesh Renderer」を追加します。
モデルは先ほどのものを設定しておきます。今回は処理部分なのでマテリアルなどは任意で
SpawnRateはわかりやすくする為に持続的に発生させています。数は任意でいいですが10~30程が確認しやすいかと思います。
今回本題のモジュールですが、スクラッチパットで作り、そこからモジュールのアセットとして出力します。
スクラッチパットの、モジュールの右にある+ボタンをクリックして生成します
名前は「NM_Test」と付けておきます。
名前をつけたら、あとはパーティクルのスポーンの所に設定すれば下準備は完了です。
【スクラッチパットの設定】
汎用的なものを目指すので、ほぼほぼ使うであろう機能から入れていきます
Vector4型の【Color】
色を制御するパラメータ
Float型の【LifeTime】
寿命を制御するパラメータ
Vector型の【Position】
座標を制御するパラメータ
Quat型の【Rotation(Quat)】
角度を制御するパラメータ
Vector型の【Scale】
大きさを制御するパラメータ
必須ではありませんが、パラメータは初期値とソート順を設定する事もできるので
必要であればやっておくと良いです。
スクラッチパットを編集したときは、ここの適用のボタンを押さないと
変えた部分が反映されないので、そこも注意してください。
LifeTime、Color、Scale
この三つはややこしい部分は特にありません、Scaleだけは、エンジンオーナーの情報とMultplyと乗算しておくと良いです。
座標と角度、座標は角度で後々対応する必要があるのでこちらで設定しておきます。
Positionはエンジンオーナーの情報とAddで良いです
角度の情報Rotation(Quat)をMeshOrientationに繋ぎます
Niagaraシステム側で、RotationにエンジンオーナーのRotation情報を入れ込みます(右の▼マークを押すと検索できます。)
この状態で、Niagaraシステムをレベル上で回すと、発生しているモデルも同じように回ってはくれます...が
元々のモデルの向きと、Niagaraシステムからの矢印の向きがあっていない状態です。
対応する向きのモデルにする方法もありますが、今回はNiagara側で対応する前提で組んでいきます。
また、発生ごとに角度のランダムも対応、発生位置も角度に合わせての対応、これらもやっていきます。
【角度の乱数】
今回穴の空いているモデルをサンプルで出しているのは、角度をわかりやすくする為です。
最終的にサムネ画像のような、角度をランダムにする向きに持っていきます。
今度はNiagaraシステム側に数値そのものを入れていきます。
「Rotation(Quat)」は角度を制御しているので、こちらを調整していきます。
まずは「MultplyQuaternion」を適応して角度の合成自体を作ります
一つ目はエンジンオーナーのRotation情報を入れ込みます
二つ目は「MakeQuat from Axis Angle」を適応します(パラメータの右の▼マークから検索すると出てきます。)
これでVectorとFloatが出てくるので、Vector型にはZのみ1を
Floatには「Rand Range Float」を適応し、0と360を設定します。
この設定で、発生する角度がランダムになります(穴の空いてるところが目立たなくなっていると思います)
矢印の向きと合っていない問題がここで発生しているので、ここを調整していきます。
MultplyQuaternionをさらに追加して、三つを乗算でそれぞれ計算します。(順番によって動きが変わることがどうもあるみたいなので注意してください)
ここまでの設定で、矢印の方向に合わせた向きに出るようになりました。
座標の調整もここからやっていきます。
【座標の調整】
このサムネの画像を見てもらうと、矢印の前後に発生位置がばらついているのが解ると思います。
座標調整用のPositionというパラメータはあるので
X軸が0~200のランダムになるように設定します
そうすると、Niagaraシステムのプレビュー上では綺麗に位置が取れていますが
レベル上にもっていくと、このように変な位置になっています。
理由は角度の対応を座標に適応する処理を入れていないからです。
既にあるモジュールからは対応されているものもあると思いますが、自分で作る場合はこの辺の対応もしていく必要があります。
対応そのものは複雑なものではなく
「Multply Vector with Quaternion」で角度を適応するだけで終わります。
一つ注意は、エンジンオーナーのPostionと加算する前に回転をかけないといけないという点。
スクラッチパット上で編集せずとも
こういう組み方をすれば処理は同じように動いてくれます。
ただ、エンジンオーナーの部分に赤線を引いてありますが
このような組み方は、こういう情報が割とむき出しになってしまい、解りにくくなる場合があります。
AddやMultplyなども同様で、スクラッチパットやモジュール内で組んでしまえば、このようなものは出てこないので、設定項目も比較的にスッキリするようになります。
モジュール自体のアセットにするには、右クリックから項目があるので、そこから行うことができます。
今回はここまでとなります、まだ処理が甘い部分がある部分は次以降の記事で触れていきます。