moyasiエフェクト館

主にエフェクト関係の記事を上げていこうかと思います。


エフェクトに関係する記事上げてきます
エフェクト関係の記事の内容は緩く募集中
自分がわかる範囲であれば書いていこうかなと。

【Niagara】発生位置をクォタニオンで制御する

f:id:tktknkyo:20190723191207p:plain

 

tktknkyo.hatenadiary.jp

 

この記事の続きというか、派生のような内容になります。

 

こちらでは、クォタニオンで変更する角度をつかって、位置を制御しよう、という内容になります。

 

こちらの方は、最初からモジュール作って処理作りました

f:id:tktknkyo:20190807214630p:plain

全体図としては、こうなっています。

 

f:id:tktknkyo:20190807214711p:plain

エミッター側から設定するためのパラメータは4つあります

BaseLocation

ベースとなる座標になります。

基本的にはParticle.Positionとなります

 

Angle

そのまんま角度ですね

 

R

これは半径となります

 

AddAngleByVector

角度を加算するベクトル、という意味で

具体的には、BP側で設定した、RotationをVectorとして、ここに適用します

 

f:id:tktknkyo:20190807220319p:plain

重要そうな部分だけを拡大するとこんな感じになります。

 

まず、Angle、つまり角度から方向を示す回転軸をつくります。

 

角度から、SinとCosを取ってきて、そこからVectorを作ります。

これの時点で、Z軸が0で正規化されているVectorにする事ができます。

 

次に、BPから持ってきた角度の情報をクォタニオンに変換します。

AddAnglebyVectorを一回BreakVectorで分解します

その後、Euler to Quaternionでクォタニオンに変換します。

 

その後、Multply Vector with Quaternionを使い、Vecorをクォタニオンで回転させます。

 

これにより、元々あった方向のVectorがクォタニオンで回転したので

そこに半径であるRを乗算します。

 

最後に、元の座標であるBaseLocationと加算して完成です。

 

 

最終的に何をしたのかっていうと。

Floatの角度からVectorを作ります。

そのVectorにBPから取ってきた角度ベクトルで回します。

最後に半径を掛けます。

 

内容としてはこの三つになります。

 

 

f:id:tktknkyo:20190807222209p:plain

モジュールの名前は変わってはいますが

これが先ほどの手順で作ったモジュールになります。

 

半径を200、角度を0~360のランダム

そしてBPから取ってきたUser.Rotationの角度を代入すると

 

f:id:tktknkyo:20190807222433p:plain

f:id:tktknkyo:20190807222519p:plain

 

このように、斬撃のメッシュと角度が同じになるように作ることができます。

(この白い粒子がそうです)

 

また、BPからとってくるので、同じ数値を使えば、連動させるような挙動にすることも可能です。

 

次に発生する角度の制御をしていきます。

とはいえ、設定そのものは時間を取ってこればいいだけなので、非常に簡単です。

 

f:id:tktknkyo:20190807224250p:plain

Angleの部分に、Emitter.Ageなどの、エフェクトそのものが発生してからの、時間を取得してくるデータを入れてしまえばうまくいきます。

 

 

前の記事の続きということで、今回は短いですがここまでになります。

最近は更新頻度下がってきているので、何かしら更新続けていきたい所です。