みつまめ杏仁

アンリアルエンジン(UE4)でGUIを作るためにゴニョゴニョしてます。UIデザイナーの皆様の助けになれば幸いです。

UMGパーティクル(なんちゃって)

 Widgetでパーティクルっぽいやつを作ったのでTwitter動画をあげたら、いいねしてもらえたので記事にしてみます。さくっとParticleをWidgetに乗せる方法が見つけられなかったのでUMGで作ってみた次第です。

 

変数の型に Box2Dというのがありまして、

f:id:hiyokosabrey:20190214223938p:plain

これを配列にして管理したらいいんじゃね?ってなったのが作り始めたきっかけ。

 

BoxなんでRectangle(長方形)の4頂点のうちの対角の2点を扱うための型です。

f:id:hiyokosabrey:20190214224414p:plain

2D座標ということで xとy を扱うVector2D が2つ束ねられているかたちです。

f:id:hiyokosabrey:20190214225611p:plain

今回これをFloat型が4つあるという認識で扱うことにしました。

 

 ちなみに 他に (x, y, z)の Vector型で2点をまとめた Box型や、BoxSphereBounds型というのもあるようです。ピンの色的にStructure(構造体)の類ですよね。

 

 

パーティクル用に格納する値は3つ。最終回転角と目的地の座標です。

f:id:hiyokosabrey:20190214230317p:plain

ここに粒ごとのゴール位置と何回転するかの値を入れていきます。

 

f:id:hiyokosabrey:20190214231111p:plain

Construct Object From Classノードで WidgetImage を量産して配列に格納。ついでにパーティクルのパラメータを設定。右端のマクロの中身はこんな感じ。

f:id:hiyokosabrey:20190214235115p:plain

発生源から ±500(50.0刻み)の範囲がゴール位置。±3 ~ ±7 回転。

 

次にキャンバスに追加。

f:id:hiyokosabrey:20190215001327p:plain

OffsetPos と、 Color はこのパーティクルWidgetを呼び出すやつがセットするので、受け取るための設定をします。

f:id:hiyokosabrey:20190215001805p:plain

 

パーティクルが発生してから、2秒後に消滅するようにタイマーをセット。Tickのためのフラグを立てて、フェードアニメーションを呼び出します。

f:id:hiyokosabrey:20190215002438p:plain

フェードアニメーションは、キャンバスに対して Render Oapicty を 1.0 → 0.0 にすることでパーティクルを一斉に消します。

 

移動処理のTickは以下。

f:id:hiyokosabrey:20190215003255p:plain

一粒ずつ処理します。ポジションと回転は、WidgetのRenderTransform を使います。それぞれの更新に必要な計算はマクロでやってます。

 

getNewTranslation

f:id:hiyokosabrey:20190215003916p:plain

 

getNewAngle

f:id:hiyokosabrey:20190215004142p:plain

 

これでパーティクルのWidgetは完成。

あとは呼び出すだけ。

 

クリックしてヒットしたときの処理に追加します。

f:id:hiyokosabrey:20190215004931p:plain

パーティクルのカラーは数字の色同様に、あらかじめ配列で持っておきます。

f:id:hiyokosabrey:20190215005102p:plain

 

できあがりです。

f:id:hiyokosabrey:20190215010157g:plain

 

一応動画を確認するためのツイートを貼っておきます。

 

パラメータを工夫すると散り加減が変えられたりして楽しめます。

テクスチャを貼るとまた違った印象になると思います。

 

 

ではでは

 今回はこの辺で

 

ステキなUMGパーティクルライフを!