ぷちコンジャムで作ったエフェクトの作り方紹介

こんにちは、UE4冬のアドベンドカレンダー3日目ですね。

今回は11月に開催されたぷちコンゲームジャムの時に作ったエフェクトの作り方をご紹介したいと思います。

ぷちコン応募作品はこちら。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ぷちコンゲームジャム応募動画、Qiita埋め込み用にちょっと短く。 <a href="https://t.co/1f6ldvdFEf">pic.twitter.com/1f6ldvdFEf</a></p>&mdash; しまふくろう@ゲームジャムの時！ (@hapi_izland) <a href="https://twitter.com/hapi_izland/status/1330761825898557440?ref_src=twsrc%5Etfw">November 23, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

　お題は「あつめる」で、今をときめくナウでヤングな開発者であれば圧倒的名作である塊魂が真っ先に思い浮かんだと思いますが、今をときめかない私はXiという昔なつかしなサイコロを使ったパズルゲームが思い浮かびました。
　そんなこんなでXiと塊魂をリスペクトしようと思い立ち生まれたのがこのゲームです。
　結構うまく作れたなーとは思っていたのですが、なんとずしさん賞を頂いてしましました。頂いたからにはコミュニティに恩返しをしなくてはと思い、今回の記事に至ります。

　さて本題。作ったエフェクトは全部で4つで、それぞれ手順を追って作っていきましょう。そのまま移せばバッチリたぶん動くので、ぜひご家庭のUE4で試してみてね。れっつごー


1.　キラキラダイス

一番カンタンに作れて、一番オススメです。
ゲーム内ではスコアを獲得するとプレイヤーの周りに出現して自転しながら周回します。

まずはマテリアルを作ります。

![Desktop Screenshot 2020.11.23 - 13.55.45.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16285/1037b6a0-4d56-7692-5296-7fe8a24cd8e5.png)

屈折率には2.2～2.4くらいの値を雰囲気で入れています。
ダイヤモンドの屈折率がだいたいこの辺らしいので、宝石感を出すにはいいと思います。

左の方にあるEdgeDetectionというマテリアル関数の中身はこんな感じ。
　sin > 1-x > power　と繋いではじっこだけ線が残るようにしています。powerの度合いで先の太さを調整できるので、関数化して使い回せるようにしておきましょう。

![Desktop Screenshot 2020.11.23 - 13.38.59.78.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16285/6ca26c8a-b171-c4fb-551a-68aa2f99d9f2.png)

お次はNiagaraEmitterを作ります。

![Desktop Screenshot 2020.11.23 - 14.09.51.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16285/4d4524b3-cdc8-8b82-88d1-eea1ccf2b115.png)

中身は簡単で、MeshRendereにキューブとさっきのマテリアルを指定するだけです。
それをMeshRotationForceとVortexVelocityでくるくる回しています。

というわけで完成。仕上がりの形が見えていれば所要時間は30分もかからないんじゃないでしょうか。おすすめ。


2.　スコアゲットしたときのﾋﾟｶｰﾝ

これもお手軽でかつかっこいいです。スコアを獲得したときに四角いエフェクトが一瞬だけ出て消えます。
まずはマテリアルから。

![Desktop Screenshot 2020.11.23 - 14.19.31.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16285/ae136f10-bec9-51a8-4cfd-fd996ccb5c82.png)

　左上のノードでノイズテクスチャを２つ足し合わせて複雑なノイズを作っています。
　今回は一方のノイズを異なるPannnerの速度でスクロールさせながら、もう一方のUVに対してAddすることで、元のTextureを歪ませています。
　これにより元のノイズの輪郭が不明瞭になるので、炎や霊気的な表現に使えると思います。

　左下のErodoというパラメーターでLinearGradientにバイアスをかけて、その右のLerpノードのAlphaにつなぐことでエフェクトの強さを決めています。ErodeパラメーターをNiagaraのカーブで調整することで、エフェクトの出現と消滅を表現することができます。

次はメッシュ。と言っても、天井と床を取っ払ったただのキューブです。Blenderで作りました。

![StandingSquareCylinder.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16285/bee3e705-16df-1686-0385-bcf5505a53e1.png)

これをNiagara上で組み合わせます。

![Desktop Screenshot 2020.11.23 - 14.38.07.77.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16285/04403a9c-c042-ca33-a704-f67a9dac5e2b.png)

DynamicParameterでErodeのカーブをスクショのように設定すると、インパクト感のあるエフェクトになります。
（数値が大きいほどエフェクトが弱くなります）

3.　レベルアップしたときのﾌﾜｧ

　レベルアップの際に波紋が出るのですが、これはさっき作ったマテリアルをそのまま流用して、円形のメッシュに貼っているだけです。
　UVをスクショのようにしておくと、テクスチャの上下が径方向に対応するので、同じマテリアルが使えます。

![Desktop Screenshot 2020.11.23 - 14.43.48.72.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16285/697493e7-09f9-a3e8-9d4b-254359b91557.png)

4.　床の音ハメ

　ダイスのマテリアルは音楽のリズムに合わせて明滅するようにしています。　ｽﾞﾝ₍₍ (ง ˘ω˘ )ว ⁾ｽﾞﾝ
　背景やキャラがBGMと連動しているとプレイヤーのテンションが1.1倍になると学校で習いましたよね！
　このために次のマテリアル関数を作りました。

![Desktop Screenshot 2020.11.23 - 14.51.32.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16285/fda48374-b493-8f26-22bf-1f81aec4734a.png)

　大したことはしていないのですが、BPMに合わせて周期が巡ってくるようにしています。これをマテリアルのエミッシブカラーに掛け算するとあら不思議、プレイヤーのテンションが1.1倍になります！
　余談ですが、Time関数はレベル読み込みからの時間を返すので、今回のような1レベル1BGM構成の場合は特にオフセットをかけなくてもピッタリ合ってくれました。
 そうじゃない場合はBGM再生時に、GetRealTimeSecondsとかのノードでOffsetをマテリアルに入れてあげる必要がありそうです。


　以上、UNREAL FEST×冬のぷちコンゲームジャム祭りの応募作品で使用したエフェクトのご紹介でした。
　エフェクトのチュートリアルはまだまだ少ないよね～と思っているので、誰かがエフェクト沼にハマってくれたら御の字です。

　ちなみに次回のぷちコンは映像編が年末にあるそうなので、シーケンサーの習熟も兼ねてチャレンジしたいですね。