敵を倒す処理はできたけれど、相手がその場から静かに消えるだけ。そこに火花がぱっと広がるだけでも、「いま倒した」という瞬間が見えやすくなります。
UE5で火花や煙などを作る仕組みが Niagara(ナイアガラ) です。画面には設定がたくさん並びますが、最初は「何個出すか」「どう飛ばすか」「どう消すか」の3つを追えば、小さな演出を作れます。
他のエンジンでいうと: Unity の VFX Graph 、Godot の
GPUParticles3Dに当たります。Unity の Particle System より、VFX Graph のほうが考え方は近いです。
この記事では、テンプレートを改造して 一度だけ広がり、薄れて消える火花 を作ります。最後はBlueprintから呼び出し、Cubeが消えた場所に火花を残してみましょう。
この記事でわかること
- System・Emitter・Moduleが、それぞれ何を担当するか
- 粒の数・色・速度・寿命を、どこで変えるか
- Blueprintから、その場に残るエフェクトを出す方法
- 同じエフェクトの色を変える方法と、移動に追従させる考え方
粒から考えると、Niagaraの構造が見える
飛び散る火花の一つひとつを Particle(パーティクル) と呼びます。この記事では「粒」と書きます。粒には、位置・速度・色・寿命などの情報があります。煙も、小さな煙の画像をたくさん重ねれば、一つの大きな煙に見せられます。
では、その粒を誰が出すのでしょうか。Emitter(エミッター) が、粒の出し方や動かし方を受け持ちます。Emitterの中にある Module(モジュール) は、「30個出す」「初速を与える」といった処理の部品です。

Emitterをまとめたものが System(システム) です。たとえば一つの爆発を、短く飛ぶ火花と、ゆっくり残る煙の2つのEmitterで作れます。Blueprintからは、そのSystemを一つ指定して再生します。
火花と煙を分けるのは、それぞれの動きや寿命を調整しやすくするためです。「色が違えば必ず別のEmitter」という決まりではありません。今回は 火花のEmitterを一つだけ持つSystem から始めます。
スタックは「いつ処理するか」で読む
Niagaraの編集画面では、モジュールが縦に積まれています。この一覧が スタック です。まず注目したいのは、各モジュールを入れるグループの名前です。

| グループ | 何をする場所? | 今回の例 |
|---|---|---|
| Emitter Update | 発生源の処理を毎フレーム行う | 粒を出す時刻や個数を決める |
| Particle Spawn | 粒が生まれたとき、その粒に一度だけ行う | 寿命・初期色・初速を決める |
| Particle Update | 生きている各粒を毎フレーム更新する | 重力で動かし、少しずつ薄くする |
毎フレーム は、ゲームが画面を更新するたび、という意味です。Particle Spawnに色を書けば「生まれたときの色」、Particle Updateで色を変えれば「生きている間の色の変化」になります。
同じグループの中では、基本的に上から下へ処理します。たとえば「重力を加える」モジュールは、「その力を使って移動する」モジュールより上へ置きます。スタック全体を一度だけ上から流れる処理だと考えず、どの粒に、いつ実行されるか と合わせて読んでください。
このほかに、発生源の初期設定をするEmitter Spawnや、粒をどう描くかを指定するRendererがあります。今回はテンプレートを使うため、すべての項目を作り直す必要はありません。
テンプレートを開いて、粒の数を変える
まず、すでに粒が出る状態の Simple Sprite Burst を使います。Sprite(スプライト)は、小さな平面に画像を貼って見せる描き方です。火花なら、カメラへ向いた小さな光の画像を粒として飛ばせます。
- コンテンツブラウザで右クリックし、「FX」→「Niagara System」を選びます。
- Emitterを選んでSystemを作る項目へ進み、テンプレートの一覧から「Simple Sprite Burst」を追加して作成します。
- 名前を
NS_Explosionにし、ダブルクリックで開きます。 - 「System Overview」でEmitterを選び、スタックと、選んだモジュールの設定が表示される詳細パネルを確認します。版によっ て「Details」または「Selection」と表示されます。
作成ダイアログの項目名や配置はUE5の版によって異なります。ここでは「Emitter Update」「Particle Spawn」「Particle Update」を編集できる通常のEmitterを使います。簡略版のLightweight Emitterとは設定画面が違うため、同名に近い候補があれば種類も確認してください。
「Emitter Update」の Spawn Burst Instantaneous を選び、「Spawn Count」を 30、「Spawn Time」を 0 にします。これは「開始時に30個まとめて出す」という指定です。プレビューを先頭へ戻して再生し、粒がまとまって出ることを確かめてください。

対して Spawn Rate は、「1秒あたり何個出すか」を決めます。たき火や煙のように出し続ける演出に向いています。今回のEmitterにSpawn Rateが入っていたら削除し、Burstだけにします。
BurstもEmitter Updateへ置きます。 毎フレーム「指定の時刻になったか」を調べ、出す時刻に達したときだけ粒を生みます。「Updateへ置いたから毎回30個出る」という意味ではありません。ただしEmitterがループすればBurstも再び出るため、次に繰り返しを止めます。
一度だけ広がり、薄れて消える火花にする
ここからは、粒を「出す」「飛ばす」「消す」の順に調整します。値を変えたらプレビューを先頭へ戻して再生し、一つ前の状態と比べてみてください。
1. 繰り返しを止める
「Emitter Update」の Emitter State を次のようにします。
| 設定 | 値 | この設定にする理由 |
|---|---|---|
| Life Cycle Mode | Self | 今回はこのEmitter自身で終了の仕方を決める |
| Loop Behavior | Once | 一度だけ再生する |
| Loop Duration Mode | Fixed | 1回の長さを固定する |
| Loop Duration | 1.0 | 発生源の1回の長さを1秒にする |
| Inactive Response | Complete | すでに出た粒が寿命を迎えるまで待って終える |
Life Cycle ModeがSystemのままだと、Emitter側のループ設定が隠れている場合があります。Selfへ変えてから設定してください。
発生源の再生時間と、粒一つの寿命は別です。 Loop Durationを変えても、粒が何秒残るかを直接指定したことにはなりません。粒の寿命は次のInitialize Particleで決めます。
2. 生まれたときの色と大きさを決める
「Particle Spawn」の Initialize Particle を開きます。名前のとおり、生まれた粒の最初の値を決めるモ ジュールです。
| 項目 | 設定 |
|---|---|
| Lifetime Mode | Random |
| Lifetimeの最小/最大 | 0.4/0.8秒 |
| Color | オレンジ。例:R=1、G=0.5、B=0.1、A=1 |
| Sprite Size Mode | Random Uniform |
| Sprite Sizeの最小/最大 | 8/16 |
Randomは、粒ごとに範囲内から値を選ぶ設定です。寿命を0.4〜0.8秒にすると、早く消える粒と少し長く残る粒が混ざります。Random UniformのUniformは、一つの粒の縦横を同じ大きさにする意味で、すべての粒を同じサイズにする意味ではありません。
Colorの A(Alpha) は、透明度に使う値です。まずは 1 にしておき、後で寿命に合わせて小さくします。
3. 上へ散らし、重力で落とす
「Particle Spawn」にある位置と速度の設定を、次の形へそろえます。必要なモジュールがなければ、グループ右側の「+」から名前を検索して追加します。同じ役割の設定を重ねないよう、既存のモジュールを先に確認してください。
- Shape Location の形を「Sphere」、半径を
5にします。発生位置を小さな球の範囲に散らす設定です。 - Add Velocity を開き、「Velocity Mode」を「Linear」にします。
- Velocityの入力メニューから「Random Range Vector」を選び、最小を
(-300, -300, 100)、最大を(300, 300, 500)にします。

Velocityは、どの方向へ、どれくらいの速さで動くか を表す値です。UEの標準的な単位ではcm/秒で、X・Yが水平方向、Zが上下方向です。この設定では左右に散りながら、最初は上へ飛びます。全方向へ均一に飛ぶ球形の爆発とは違い、少し噴き上がる火花になります。
次に「Particle Update」の Gravity Force を (0, 0, -400) にします。入っていなければ、そのグループの「+」から追加します。Solve Forces and Velocity は残し、Gravity Forceより下に置いてください。重力の設定を使い、実際に粒の速度と位置を更新する役目です。順序の警告が出たら「Fix Issue」で依存関係を直し、並びも確認します。
テンプレートに別のAdd Velocityや力のモジュールが入っている場合は、今回使わないものを無効にしてから比べます。なお、重力だけでは床との衝突は起きません。ここでは「飛んで薄れる」演出を作り、床で跳ねる処理は追加しません。
4. 寿命に合わせて薄くする
Lifetimeだけでも粒は消せますが、その直前まで同じ濃さだと、ぷつっと切れたように見えます。「Particle Update」の Scale Color で、Alphaを徐々に小さくしましょう。入っていなければ追加します。
ここでは、カーブ上に置く キー という点で、値の変化を指定します。最初と最後に点を置いて結べば、その間のAlphaも自動で求められます。
- Scale RGBは
(1, 1, 1)にするか、RGBの変更を無効にします。初期のオレンジ色を保つためです。 - Scale Alphaの入力を「Float from Curve」にし、右下がりのカーブにします。キーは「Time=0、Value=1」と「Time=1、Value=0」の2点にし、キーの補間を「Linear」にすると、間を直線で結べます。
- カーブを読む値が
Particles.NormalizedAgeになっていることを確認します。 - Particle State は残し、「Kill Particles When Lifetime Has Elapsed」をオンにします。寿命を迎えた粒を消す設定です。

Normalized Age は、寿命のどこまで進んだかを0〜1で表した値です。生まれた瞬間が0、寿命の半分が0.5、終わりが1。カーブの横軸は「秒」ではありません。寿命が0.4秒の粒も0.8秒の粒も、それぞれの一生に合わせて薄れます。
ここまでで、オレンジの粒が一度だけ広がり、薄れて消えれば成功です。プレビュー自体の繰り返し再生と、EmitterのLoop Behaviorは別なので、繰り返して見えるときはプレビューのループも確認してください。
色はNiagaraからマテリアルへ渡る
色を設定したのに変わらないときは、粒を描く側も見てみましょう。Sprite Renderer は、粒の位置や大きさを使って、画像を貼った平面を描きます。そこで使う マテリアル が、光り方や透明部分の見せ方を決めます。

Niagaraで設定した色は Particles.Color に入り、Rendererを通じてマテリアルへ渡ります。マテリアルが Particle Color を使うように作られていれば、Initialize Particleのオレンジ色や、Scale Colorによる薄れ方が見た目へ反映されます。
今回は、テンプレートのSprite Rendererとマテリアルをそのまま使います。別のものへ差し替えて色が変わらなくなったら、「Niagara内で色を上書きしていないか」「RendererのColor BindingがParticles.Colorか」「マテリアルがParticle Colorを使っているか」の順で確認すると、原因を絞れます。
光を足すように重ねる Additive は火花に向いた描き方です。一方、煙には奥を覆う半透明の見せ方が必要になります。まずは粒の動きを完成させ、見た目を作り込む段階でマテリアルの基礎へ進むと、覚えることを分けられます。
実践:Cubeが消えた場所に火花を残す
NS_Explosionを保存したら、次はゲーム側から呼び出します。最初は Play開始から2秒後にCubeを消す 形で確かめます。攻撃やHPの仕組みがなくても試せるようにするためです。
Cubeと、再生のきっかけを用意する
- 親クラスがActorのBlueprintを作り、
BP_VFXTargetと名付けます。 - Static Meshコンポーネントを追加し、「Static Mesh」にエンジン標準のCubeを指定します。相対位置は
(0, 0, 0)のままにします。 - Blueprintをレベルへ置き、Cubeが地面へ埋まらない高さにします。平らな床ならActorのZを
100ほどにし、プレイヤーから見える位置へ置きます。 - このBlueprintのEvent Graphで、
Event BeginPlay→Delayを白い実行線でつなぎ、Durationを2.0にします。

Delayは、この先の処理を指定秒数だけ待たせます。ゲーム全体が2秒間止まるわけではありません。次の図は、このDelayの Completed から続けます。
位置を渡して再生してから、Cubeを消す
Spawn System at Location を追加します。Locationは、そのエフェクトを出すワールド上の位置 です。今回ならCubeを持つActorの位置を渡します。

Get Actor Location は、指定したActorの位置を取得します。Targetは「どのActorか」、Selfは「このBlueprint自身」です。Return Valueは取得した位置の出力で、X・Y・Zをまとめた Vector型 の値です。
接続は次の3本です。
- Delayの「Completed」→
Spawn System at Locationの白い実行入力。 Get Actor Location(Target: Self)の「Return Value」→ Spawnの「Location」。これは黄色のVector線です。- Spawnの白い実行出力→
Destroy Actor(Target: Self)の実行入力。
Spawnノードは次の設定にします。見えない項目は、ノード下部の詳細ピンを展開してください。
| 入力 | 値 |
|---|---|
| System Template | NS_Explosion |
| Rotation | 0, 0, 0 |
| Scale | 1, 1, 1 |
| Auto Activate | オン:生成したら再生を始める |
| Auto Destroy | オン:Systemが再生を完了したら片付ける |
| Pooling Method | None |
| Pre Cull Check | オフ:今回は生成前の省略判定を使わず確認する |
Cubeを消す前に、その位置でエフェクトを出す 順序です。Spawn System at Locationは敵へ取り付けずに生成するため、続けてDestroy ActorでCubeを消しても、粒はその場で演出を続けます。
Auto Destroyは「0.8秒後に強制的に 消す」設定ではありません。Systemの再生完了を待って、生成したNiagaraコンポーネントを片付けます。粒が見えなくなる時刻と、この片付けの時刻を同じものだと考えないでください。
Playして確認する
BP_VFXTargetをコンパイル・保存してPlayすると、まずCubeが見えます。2秒後にCubeが消え、その位置からオレンジの粒が飛び、短い時間で薄れて消えれば成功です。もう一度確かめるには、Playを終了して再開します。
| うまくいかない状態 | 確認する場所 |
|---|---|
| Cubeが消えない | BP_VFXTargetをレベルへ置いたか。BeginPlayからDestroy Actorまで実行線がつながっているか |
| Cubeは消えるが粒が見えない | System TemplateがNS_Explosionか。Auto Activateがオンか。Niagara単体のプレビューでは見えるか |
| 火花が何度も出る | Spawn Rateが残っていないか。Emitter StateがSelf / Onceか |
| 粒が寿命を過ぎても残る | Particle Stateで、寿命を迎えた粒を消す設定が有効か |
| 粒が薄れず急に消える | Scale ColorのAlphaカーブと、マテリアルへの色の受け渡し |
動いたら、Spawn Countを 30 → 60 にしてみてください。次は数を戻し、サイズの最大だけ 16 → 30 にします。粒を増やす場合と、一部の粒を大きくする場合で、同じ火花でも印象が変わります。一つずつ変えると、どの設定が効いたか分かります。
敵を倒した瞬間へつなぐときは、BeginPlayとDelayの代わり に、HPが0以下になった分岐のTrueから、同じSpawn→Destroyの処理 を呼びます。体力の判定は体力とダメージの記事を参照してください。エフェクトを出す部分が完成していれば、あとは呼ぶきっかけを差し替えられます。
その場に出すか、動くものへ取り付けるか
撃破や着弾では、起きた場所に演出を残したいものです。今回の Spawn System at Location が向いています。
一方、剣先から出す光や、走る車の排気は、発生源が移動します。こうした場面では Spawn System Attached を使い、「Attach to Component」に剣のMeshなど、取り付け先のコンポーネントを渡します。キャラクターの決まった部位へ付けるなら、Attach Point Nameにソケット名も指定できます。

ただし、発生源が付いて動くことと、すでに出した粒も付いて動くことは別 です。後者を決めるのが、Emitterのプロパティにある Local Space です。

- オフ:粒はワールド上で動きます。車が先へ進んでも、出した排気は後ろに残せます。
- オン:粒の位置を発生源から見た位置として扱います。キャラクターが動くと、周囲のオーラも一緒に移動します。
Attachedを選ぶだけで、出した粒がすべて追従するわけではありません。「発生源を何へ取り付けるか」と「粒をどの空間で動かすか」を分けて考えると、狙った演出に近づけます。
User Parameterで、同じエフェクトの色を変える
オレンジの火花はできました。次に青い火花も欲しくなったとき、Systemを丸ごと複製すると、後で粒の数を直す場所が増えます。
User Parameter は、Niagaraの外から値を渡すための設定項目です。「色をここから受け取る」と決めておけば、一つのSystemを色違いで使えます。まずはBlueprintを増やさず、レベルへ置いたものの設定で試します。

- NS_Explosionを開き、「User Parameters」の「+」からLinear Color型の
TintColorを追加します。名前はUser.TintColorとして扱われます。 - 既定値を、これまでと同じオレンジ
R=1、G=0.5、B=0.1、A=1にします。 - Initialize ParticleのColorの入力メニューで
User.TintColorを検索し、入力として選びます。「Link Inputs」などの項目から 選べます。これで固定色の代わりに外から渡した色を使います。 - NS_Explosionをレベルへ2つドラッグし、離れた位置へ置きます。
- 片方だけを選び、詳細パネルの「User Parameters」でTintColorを青
R=0.1、G=0.4、B=1、A=1に上書きします。 - Playを開始し、片方はオレンジ、もう片方は青で出ることを確認します。一度だけの演出なので、見逃したらPlayを再開します。
Linear Color は、R・G・BとAlphaをまとめて持つ色の型です。手順3の Link Inputs は「この設定項目の値を使う」という結び付けです。パラメータを追加しただけでは粒の色は変わらず、Colorへ結び付けるところまでが必要になります。
今回Colorを読む場所はParticle Spawnなので、色は粒が生まれたときに決まります。再生途中でUser Parameterを変えても、すでに出した粒の初期色まで自動で更新されるわけではありません。
このようにレベル上から値を変える手順は、Epic公式のUser Parametersの説明でも紹介されています。
おまけ:先に知っておくと良いこと
- 見た目と負荷を別々に確かめる:大きな半透明の粒を何枚も重ねると、粒数が少なくても重くなることがあります。まず数・大きさ・重なりを調整し、負荷はstatコマンドなどで確認します。
- CPUとGPUは、粒の動きを計算する場所:最初はテンプレートの設定で形を作ります。大量の粒を扱う段階でGPU実行を 検討しますが、使える機能やBoundsの扱いも確認が必要です。切り替えだけで、あらゆるエフェクトが軽くなるわけではありません。
- Boundsは、エフェクトが収まる範囲の見積もり:UEはこの範囲などから描画が必要か判断します。カメラの向きで演出が丸ごと消えるときは、Boundsが粒の広がりを含むか確認します。遠くで消える場合は、距離による省略設定も見ます。
- 音やアニメーションの瞬間と合わせる:撃破音を同じ位置で鳴らすなら音の距離減衰の記事、剣を振る瞬間に出すならAnim Notifyの記事へ進めます。
最初の一つは、小さな火花でも十分です。粒を出せたら、数・速さ・消え方のどれか一つを変えてみてください。自分のゲームの「当たった」「倒した」に合うタイミングを探すと、設定の意味が見た目と結び付いてきます。
まとめ
- System(全体)・Emitter(1種類の粒)・Module(1つのふるまい)の3層
- 粒の数・色・速度・寿命は、それぞれ担当のModuleで変える
- その場に残すか、動くものへ付けるかで出し方が変わる
- User Parameterを使うと、同じエフェクトの色を配置ごとに変えられる
作る前の問いかけは、「この演出は、その場に残るか、何かに付いて動くか」 です。そこで出し方が決まります。
当たった瞬間の演出とつなげるなら ヒットの手応え へ進んでください。
参考:Epic公式の火花エフェクト制作例、Emitter Updateの設定、Particle Updateの設定、Spawn System at Location