Unreal Engine(UE)で光の粒子になって消える(死ぬ)様子を作ってみよう!
キャラクターが死ぬ時に、光の粒子になって消えてほしいと思ったことはありませんか?
今回はナイアガラエフェクトを使用して、光の粒子になって消えるエフェクトの作り方を伝授します。
動作環境
当記事の動作環境は以下の通りです。
バージョンや環境によっては、正常に動作しない可能性があります。
また、プロジェクトはサードパーソンプロジェクトの使用を前提とします。
エフェクトの作成
対応方針としては、Niagara(以下、ナイアガラ)を使用します。
Niagaraエフェクトの作成
まずはNiagaraエフェクト(以下、ナイアガラ)を作成します。
コンテンツブラウザにて、何もない部分を右クリックして、「Niagara システム」をクリックします。
「選択したエミッタに基づく新しいシステム」を選択します。
「Fountain」を選んだ状態で+ボタンを押下して、終了します。
※上図では「Empty」を選択していますが、「Fountain」を選択してください。
ナイアガラを追加後、その作成したナイアガラを開きます。
エフェクトの編集
ここからエフェクトを編集していきます。
ナイアガラは細かい設定が多いので、漏らさず確実に対応してください!
不要設定の削除
初期状態でチェックされている各設定について、不要なもののチェックを外していきます。
不要なものなので、設定自体を削除しても構いません。
削除する設定は以下の通りです。
- 【エミッタの更新】の「Spawn Rate」
- 【パーティクルのスポーン】の「Add Velocity」「Shape Location」
- 【パーティクル更新】の「Gravity Force」
パーティクル数の設定
【エミッタの更新】の+ボタンを押下して、「Spawn Burst Instantaneous」を追加します。
「Spawn Burst Instantaneous」を選択した状態で、詳細欄の「Spawn Count」を1000~2000程度に設定します。
(出力するパーティクル数なので数値は何でも可、好みに応じて変更してください)
パーティクルの形を設定
【パーティクルのスポーン】の+ボタンを押下して、「Skeletal Mesh Location」を追加します。
詳細欄の「メッシュ」-「Preview Mesh」に消滅させるキャラクター(ここではSKM_Manny)を設定します。
また、「Sampling」-「Mesh Sampling Type」を”Surface (Triangles)”に変更します。
エフェクトの時間と飛散距離の調整
【パーティクル更新】の+ボタンを押下して、「Curl Noise Force」を追加します。
詳細欄の「Noise Strength」の値を50~200ほどに設定します。
さらに、【パーティクルのスポーン】の「Initialize Particle」を選択して、詳細欄の「Point Attributes」にある「Lifetime Min」の値を5、「Lifetime Max」の値を7程度に変更します。
最後に、【エミッタの更新】の「Emitter State」を選択して、詳細欄を以下の通り設定します。
- 「Loop Dulation」の値を上記の「Lifetime Min」と同じ値(または近い値)に設定
- 「Loop Behavior」の値を「Once」に変更
エフェクトの色を変更
【パーティクルのスポーン】の詳細欄の「Point Attributes」にある「Color」を調節してエフェクトの色を変更します。
徐々にパーティクルを小さくする(or 大きくする)
【パーティクル更新】の+ボタンを押下して、「Scale Sprite Size」を追加します。
この際、【パーティクル更新】の一番下になるように移動してください。
※ナイアガラエフェクトは上から順番に優先順が付けられます
グラフをいろいろ変更して理想に近い形に調整してください。
徐々に小さくする場合は、時間0・値1 ⇒ 時間1・値0にします。
大きくする場合は、時間0・値0 ⇒ 時間1・値1にします。
グラフ上の点を右クリックして、「定数」や「自動」などを調整しても良いでしょう。
これでエフェクトの完成です!
エフェクトの呼び出し
今回作成するエフェクトは、常にフィールドに存在するわけではなく、キャラクターの動きに応じて呼び出す使い方をするかと思います。
ここからは、エフェクトの呼び出し方を解説します。
発動トリガーの作成
キャラクターのブループリントを編集して、エフェクトを呼び出します。
まずはエフェクトを発動するきっかけ(トリガー)を作ります。
実際のゲームでは、ダメージがある程度蓄積した場合などになるかと思いますので、この工程は不要です(というか別途作成してください)。
この記事はサンプルなので、トリガーはキーボードのEnterキー押下にします。
Set All BodiesSimulatePhysicsノードを使うと、いわゆるラグドールと呼ばれる体の力が抜けるような挙動を見せることができます(New Simulateにチェックすれば作動します)。
コリジョンが無いと落ちてしまうため、Set Collision Meshを追加しています。
Delayは無くても良いのですが、すぐにエフェクトが発生しない方が見やすいので入れてあります。
キャラクターを消す
トリガー(この記事ではDelay)に対し「Set Visibility」ノードを接続します。
この時、New Visibilityピンにチェックが入っていないことを確認してください。
Targetピンをメッシュ(Get Mesh)と接続します。
エフェクトの呼び出し
「Set Visibility」ノードに対し「Spawn System Attached」ノードを接続します。
Attach to Componentのピンを、「Set Visibility」ノードのTargetピンと同じメッシュ(Get Mesh)に接続します。
次に、Location Typeピンの内容を「Snap to Target, Keep World Scale」に設定します。
最後に、Auto Destroyにチェックを入れます。
完成!
これで完成です。
もしうまくいっていない場合、どこか手順に抜けがあったり設定ミスがある可能性があります。
手順が多いので、一つ一つ確認してみてください。