PavilionDV7の雑多なやつ

Qiitaから移行しました。UE4に関する記事から興味のあることまで色々書きます。

【UE5】鎖エフェクトを作る

はじめに

第19回ぷちコンに提出したゲームで実装した鎖エフェクトの実装を紹介。

youtu.be

実装開始

まずはテクスチャを用意する

自分はGIMPがメインツールなのでPhotoshop等の有料ソフトを使っている方は近しい操作で作成すること。

サイズはとりあえず1024 x 1024で作成する。 矩形選択の角を丸め、「境界線を描画」で1と0のような図形を作る。

いくつか複製し、これを横方向に並べていく。並べ終えたら出力する。

GIMP – 四角形の角を丸くする方法【写真/画像の角を丸める方法も】 | Howpon[ハウポン]

単純な画像の縁を描く(縁取りや輪郭線、アウトライン) / 《WEB素材&デザイン》


自分が作成したテクスチャを貼るので作成するのが面倒であれば「画像を保存」で保存してもOK。(念のためpng形式で保存すること) もしかするとプレビューの関係でページに映ってないかもしれない。すまん。

パーティクルマテリアルを作る

作成した鎖テクスチャをエンジンにインポートし「sRGB」の項目にチェックを入れておく。

続いてマテリアルアセットを作成し、マテリアル設定を次のようにセットする。

更に次のようにマテリアルを実装する。Texture Sampleには作成した鎖テクスチャを設定している。

鎖エフェクトを作成する

ここからは手順が非常に多くなるのでゆっくり読み進めること。

Niagara SystemアセットをDynamic Beamをテンプレートとして作成する。 続いてUser ParametersにFloat型とVector型の2つの変数を追加する。

それぞれの値を次のようにセットする。


Emitter Update -> Emitter Stateを選択し、プロパティを次のようにセットする。(画像赤枠部分)

Emitter Update -> Beam Emitter Setupを選択し、次のようにセットする。画像青枠部分の「Absolute Beam Start」「Absolute Beam End」の各チェック状況に注意すること。

Beam EndプロパティでLerp Vectorを使うことでBeam StartからBeam Endまで伸びるような動きを作ることが出来る。Lerpで使うAlpha値には「NormalizedLoopAge」を設定している。この値はEmitter Stateでセットした「LoopAge」と「CurrentLoopDuration」の除算の結果であり、値は0.0~1.0の範囲に収まるのでAlpha値として使うのにピッタリ。

Unreal Engine の Niagara エフェクトの Emitter Update グループのリファレンス | Unreal Engine 5.1 ドキュメント

Emitter Update -> Spawn Burst Instantaneousを選択し、Spawn Countを「2」にする。(1ではエフェクトが表示されない。始点と終点で2点必要だからだろうか)


Particle Spawn -> Initialize Particleを選択し、画像赤枠の部分の値をセットする。Colorはお好みでOK。画像の色だと熱を帯びた黄色や白のような色になる。

Particle Spawn -> Beam Widthを選択し、Beam Widthに「200」をセットする。


Particle Updateの「Color」と「Solve Force and Velocity」を削除し「Scale Color」を追加する。 Scale Colorは次のようにセットアップする。


最後にRender -> Ribbon Rendererを選択し、Materialを作成した鎖マテリアル、UV0 Settingsを画像赤枠のようにセットする。

後はセットアップしたEmitterをいくつか複製する。


鎖の本数を増やすためにEmitterを複製する方法を選んだのは「同タイミングに生成・消滅させるため」。Emitter StateのLoop Durationを利用して複数本のRibbonエフェクトを生成させる方法があるが、この鎖エフェクトで同様の設定をしても1本ずつしか生成されなかった。

【ナイアガラ超基礎 #10】ビームをはどうやって作られるか【Unreal Engine】 | 謎の技術研究部

あるEmitterのLocation Eventを受け取って鎖を生成する方法も試してみたが、操作が煩雑で調整に時間がかかりそうだったので、まずきちんと動く一本の鎖を作って複製する方法を選んだ。

【UE4ゲーム制作講座】NiagaraでNARUTOの千鳥っぽいエフェクトを作る - YouTube

実際に使ってみる

Actorクラスを継承してエフェクト再生用のアクターブループリントを作成する。このときキー入力を受け付けるために「Auto Receive Input」を「Player 0」に変更しておく。

続いてNiagara Particle System Componentを追加し、作成した鎖エフェクトをセット。Event Graphに次のように実装する。

エフェクト再生用アクターをレベルに配置するが、わざと「原点から少し離れた位置」に配置し再生してみる。(X:500.0 Y:500.0 Z:0.0あたりに置いてみる)

アクターを配置した位置から鎖が伸びる位置はワールド座標のX:0.0 Y:0.0 Z:500.0になっている。これは鎖エフェクトで定義したUser ParametersのBeam Endの初期値の値である。

今回のエフェクトは配置した真上に鎖が伸びてほしいのでブループリント側でパラメータの値を改めて設定する必要がある。エフェクト用ブループリントを開き次のように実装を修正する。

これでプレイすると初回はワールド座標のX:0.0 Y:0.0 Z:500.0に伸びるが、2回めからは正しく配置したアクターの真上に鎖が伸びる。 初回でおかしな方向に伸びるのはNiagara Particle System Componentの「Auto Activateフラグ」にチェックが入っているため。