はじめに
今回はUnityのParticleについて基本的な考え方と使い方を紹介します。

全てのパラメータを1つ1つ解説する記事ではないです。
扱う上で最低限の情報だけ乗せてとりあえず使えるようになるのが狙いの記事です。
※すべてのパラメーターを知りたい方はUnity公式ドキュメントをChat GPTあたりで翻訳しながら見ましょう。
基本的な考え方
パーティクルの基本は「X,Y,Z」上に配置された位置情報です。

ここに「画像 or 3Dモデル」を表示させることで描画が行われてます。

この位置情報を動かして形を作ります。

もちろん、動かさない場合もあります。
(モンスターの目を光らせる時など)

また移動の軌跡は「トレイル」と呼ばれここに情報を入れることもできます。

トレイルに入れれるには「画像情報」だけです。

位置情報の本体には「画像」か「3D」モデルを入れれる。
軌跡には「画像」情報だけ入れれると覚えればOK。

この情報を複数飛ばすことで複雑な造形が行えます。

さらに条件分岐で動作を追加してより複雑な動きを作れます。
【条件分岐の例】
・時間経過で
・コライダー衝突で
・移動速度で
…など

さらに条件分岐で別パーティクルを発生されることもできます。
このような処理をサブエミッターと呼びます。

サブエミッターは入れ子にすることができ、より複雑な挙動を作れます。

以上がパーティクルの基本的な考え方です。
パーティクルの作り方
Unityを立ち上げ。
ヒエラルキーを右クリック。
エフェクト → パーテイクルシステムを追加。

追加した「Particle System」をダブルクリック。

するとシーン上にこのような表示が出てきます。
これがパーテイクルです。


複数の位置情報が生成され1つ1つに対して「白い丸」の画像が表示されてます。
右下のボタンがコントローラーです。

これでパーティクルの挙動を止めたり、再生を1からやり直したりできます。

そしたらインスペクターを確認。

ここにある操作項目がエフェクトの形を作る要素です。

シーン表示の調整方法
シーンの表示が右上の「ギズモ表示」を有効化で調整できます。

有効化すると発生源の形が現れます。(水色の円錐)

ギズモ横の「▼」をクリック。
アウトラインの強調を無効化。

すると周りに表示されていたオレンジ色の枠が消えます。

以上がシーン表示の調整方法です。
値の設定方法(カーブや2つの数値間など)
パーティクルのパラメーターは数値入力で操作できます。

そして右側の「▼」を押すとカーブなどの細かな入力調整が行えます。

カーブにすると時間経過で指定した値にループで可変した数値入力が行えます。


実物触って挙動見て覚えた方が早い。
よく使うのは「2つの値間でランダム」です。
設定した値の中からランダムの値を参照して入力する処理。

2つのカーブは動作が複雑すぎるのであまり使わないです。
以上が値の設定方法です。
パーティクルの放出数を変える
パーティクル出現の “上限数” は最大パーティクルで設定できます。

1にするとパーティクルが1つだけになります。

これは出力可能な最大数です。
最大パーティクル数を50にすると50個出るというわけではないです。

実際の出現数は「寿命」×「1秒当たりの出力数」で決定します。

寿命5秒、出力1秒の場合・・・

5×1=5個表示されます。
最大パーティクル数が50でも表示は5個です。


逆に掛け算の値が最大パーティクル数を上回った場合…
5×50=250、最大数50にすると「50」個で生成が止まる挙動になります。
以上が放出数の変え方です。
エミッター速度による生存時間
生存時間は「エミッター速度による生存期間」でも変化可能です。
このエミッター速度は “オプジェクト本体” の速度、移動量を表してます。

わかりやすいように斜め右上に上がるカーブを設定。

そしてエミッターを動かすと…
動かしたときだけパーティクルが発生する挙動が作れます。


動かしてないときはパーティクルの寿命 = 0なので表示されません。
こんな感じの挙動です。

以上がエミッター速度による生存時間です。
バースト放出
パーティクルはバーストという放出方法があります。
試しに時間ごとの率を0に設定。
バースト右上の「+」を押して有効化。

すると設定した数のパーティクルが一斉に放出されます。

こんな感じの挙動です。

バーストの発生周期は「継続時間」を操作すると変えれます。

数値を下げると素早い周期でバースト発生を行えます。

またバーストは「+」で新しく作れます。
「時間」は開始時間のズレです。

2つ目のバーストにある時間を「2.000」にしてタイミングをずらすと…
↓下図のような挙動を作れます。

こんな感じの挙動です。

また時間ごとの率とバーストは組み合わせれます。

この2つを合わせるとより複雑な挙動が作れます。

そしたら次の説明のために「バースト」を「ー」で削除。
時間ごとの率を10に設定。

以上がバースト発生の説明です。
形状について(放出の方向)
パーティクルの放出方向は「形状」で変化されます。

形状 → 形状より設定可能。

主に使うのは下記の三つ。
・スフィア = 放射状
・円錐 = 1方向
・形状をオフ = 一ヶ所1方向
試しに形を「スフィア」に設定。
すると中央から広がる形でパーティクルが発生します。

こんな感じの挙動です。

他はあまり使わない単純な形。
メッシュ系は3D形状を読み込んで発生源にする。
Sprite系は2Dオプジェクトをもとに発生させる処理などがあります。


めったに使わないので覚えなくてもOK。
形状を選択すると下にその形状を操作するパラメーターが出てきます。

これで円錐を変形させたりできます。

こんな感じで形を変えると発生方法が変わります。

形状はオフにすることも可能。

オフにすると表示は無効化する前のモノが表示されます。
そして中央の1点から1方向にパーティクルが発生するようになります。

以上が形状についての解説です。
パーティクルの挙動制御(放出の挙動)
開始時の速度を操作すると形状で決まった方向に動く速度を上げれます。

0にするとその場で動かないパーティクルを生成できます。

あとは下図のところが挙動や速度に関係あるパラメーターです。


この中からよく使うものだけピックアップして解説します。
重力は文字通り重力です。

設定すると下に落ちます。

生存時間の速度は挙動を変える処理です。
リニアYの値を操作。

すると斜め方向に移動するようになります。

軌道Yを操作。

すると円を描くような変形になります。

空間はX,Y,Z空間の扱いです。

生存時間の外力は外側から力が加わったような動きになります。

こんな感じの挙動です。

そしたら次の「ノイズ」解説用にこのようなパーティクルを生成。

ノイズを有効化。

すると動きがぐにゃぐにゃになります。

こんな感じの挙動です。

以上が挙動関係の操作です。
トレイル(尾)
トレイルは尾です。
これを説明するために発生が1つだけの上に向かうパーティクルを作成。

トレイルは有効化。
すると尾が発生します。

ただピンク色ですね。(マテリアルエラー)
トレイルに画像をマテリアル経由で割り当てる
マテリアルの情報は「レンダラー」を開くと確認できます。
トレイルは初期状態でマテリアルが「なし」になります。
なのでマテリアルエラーが発生します。

トレイルを表示するためにマテリアルを作ります。
プロジェクトを右クリック。
作成 → マテリアルを選択。

トレイルマテリアルにドラッグ&ドロップで割り当て。

マテリアルをクリック。

インスペクターを確認。
アルベド左にある「〇」より任意の画像を割り当て。
ここではDefault Particleを割り当てました。

すると透明部分が黒く表示されたトレイルが発生します。

マテリアルのレンダーモードを「Fade」に設定。

これで透明情報が入ります。

あとはパーティクルを選択。

トレイルにあるテクスチャモードがトレイルに入れる画像の挙動です。

ためしに「タイル」に設定。

すると画像が引き延ばされず、タイリングされて表示されます。

以上がトレイルに画像をマテリアル経由で割り当てる方法です。
マテリアルの色が変わらないときの対処法
トレイルは「生存期間の色」で色を変えれますが…
初期マテリアルだと色が変わりません。

これで色を変えたい場合は「パーティクル用のシェーダー」に切り替える必要があります。
プロジェクト → マテリアルを選択。


逆に色を変える予定が無ければシェーダーは何を使ってもいいということになります。
シェーダーを「Particle」の中にあるモノに切り替え。
・Surface → 3D形状などを表示する用、陰影がある
・Unlit → 画像などを表示する用、陰影が無い
ここではParticle Unlitに設定。

すると「生存期間の色」で色が変わります。

色の右側にある「▼」でグラデーションも設定可能。

色のグラデーションにある上部パラメーターは不透明度です。

これを使えばジワジワと消えるトレイルが作れたりします。

以上がトレイルの解説です。
パーティクルにマテリアルを割り当てる
先ほどトレイルの説明で作ったマテリアルをShift+Dキーで複製。

レンダラーでマテリアルを割り当てます。

マテリアル経由で画像を割り当て。

これでパーティクルに画像をマテリアル経由で割り当てれます。

UVスクロールを行う
マテリアル、シェーダーにはUVスクロールが可能なものがあります。
ここでは “トレイルに” 割り当てたマテリアルを選択。

UVスクロールができるシェーダーを読み込み。
ここではlilToonを使用。

シェーダーをlilToonに変更。

UVスクロールを有効化。

UVスクロールを正しく表示するために再生ボタンを押します。

するとトレイルの画像がUVスクロールします。

こんな感じの挙動になります。

以上がUVスクロールです。
パーティクルに3D形状を読み込んで使う
パーティクルは画像だけでなく「3D」形状も割り当てることができます。

これはレンダラーのレンダーモードを「メッシュ」にすると設定可能。
メッシュで形状を選択できます。
そしてマテリアルは形状全体に対して割り当てられます。

メッシュにある「〇」を押して最初からあるCubeあたりを読み込み。

“パーティクルに” 割り当てたマテリアルを選択。

アルベドにある画像をクリック。
BackSpaseキーで削除。

シェーダーをParticle – Surfaceに変更。

するとCube形状が飛びます。

増やすとこんな感じです。

.fbx形式で自作のモデルを読み込む方法
3D形状はもちろん自作のモノも読み込めます。
.fbxで適当な形状を読み込み。
そして「▶」を押して形状の中にあるデータを表示します。

この中にある「形状データ」をメッシュにドラッグ&ドロップ。

すると形状が飛びます。

↓詳細はこちらで解説。
以上が3D形状を読み込む方法です。
回転、色、スケールの操作
まず回転から行きます。
開始時の3D回転を適当に操作。

するとパーティクルが回ります。

開始時の回転は画像を回すとき向け。

生存期間の回転、速度の回転は条件分岐での操作。

これですべての形状がばらばらに回ったりします。

こんな感じの挙動です。

次は色です。
シェーダーがParticle系のモノの場合、開始時の色で変更可能。

こんな感じで色が変わります。

色はグラデーションを設定可能。

開始時のグラデーションの場合、時間経過で色が変わります。

「生存期間の色」や「速度による色」でも変化を作ることが可能

特に生存期間の色が重要。
ここにグラデーションを入れると多くの人が思い描く挙動になります。

こんな感じの時間経過で色が変わるパーティクルが作れます。

次はサイズ。
開始時が初期状態。

こんな感じです。(回転が入ってます)

生存期間と速度で変化をつけれます。

生存期間のサイズにカーブを入れると徐々に大きくしたりできます。

あとサイズでよく使うのが2つの数値間でランダム。

これでランダムなサイズのパーティクルが作れたりします。

3Dサイズを無効化すると普通のサイズ(全体変更)がでます。
これで比率を変えずにランダムなサイズで出力できます。

以上が回転、色、スケール操作です。
サブエミッターの使い方
サブエミッターは条件分岐で別パーティクルを発生される処理です。

サブエミッターを有効化で作れます。

これを使うには2つ以上のパーティクルが必要です。

下図のようなパーティクルを用意。

作った2つ目のパーティクルをサブエミッターのところにドラッグ&ドロップ。

警告が出るので「Yes」を押すと自動でヒエラルキーの階層が「子」になります。
この状態になればOK。

すると子としてパーティクルを発生させることができます。

こんな感じの挙動です。

発生以外はバーストじゃないと表示されない
サブエミッターは左側のところで発生条件を操作できます。
試しに「消滅」に設定。

すると… 発生以外は何もしないとパーティクルが消えます。

これはUnity固有のバグと言いますか…
謎挙動で「時間ごとの率」はサブエミッターで出すと発生以外で消えるのが原因。
そこでサブエミッターにしたパーティクルを選択。

時間ごとの率を消して「バースト」で発生を操作。

すると消滅時にサブエミッターでパーティクルが発生します。

こんな感じの挙動です。


頑張れば花火みたいなのが作れますね。
以上が発生以外はバーストじゃないと表示されないの解説です。
サブエミッターを入れ子にする
サブエミッターは入れ子にできます。

子としてパーティクルを入れる+サブエミッター設定。
これで入れ子になります。

以上がサブエミッターは入れ子にできるの解説です。
画像に粒子をまとめて軽量化
水しぶきなどたくさんの粒子が欲しい場合…
全てをパーティクルで表現すると数が多くなり重たくなります。

1枚の画像に複数の粒子を描画して読み込むというテクニックが使えます。
試しに256pxあたりで画像を作成。

適当に粒子を複数描画。

背景を透過にします。

透過.pngで保存。

マテリアル経由で読み込み。
すると少ないパーティクルで複数の粒子を飛ばせれます。

こんな感じの挙動です。

あとは開始時のサイズや回転で「2つの値をランダム」に設定。

変化をつけると自然になります。

以上が画像に粒子をまとめて表示するテクニックです。
1枚の画像で複数の情報を入れる(アトラス)
テクスチャアニメーションシートを使うと1枚の画像で複数の情報を入力できます。
よく使う必須テクニックです。

↓こんな感じの画像を用意。

普通に飛ばすとすべての画像が表示されます。

そこでテクスチャアニメーションシートを有効化。
タイルを「4」×「4」に設定。

すると画像が縦に÷4、横に÷4されてアニメーションした形で表示されます。

こんな感じの挙動です。

またテクスチャアニメーションシートは1~16の画像をランダムで飛ばして固定するなども可能。
スタートフレームを0~15の値の間でランダムに設定。

フレームオーバータイムが表示順です。(アニメーションの本体)
こちらのカーブを選択。

下側に一直線のカーブに変更。

すると1~16の画像がランダムに表示されます。
そしてアニメーションは消えます。


これで粒子を複数まとめて飛ばした際、画像の使いまわし感を軽減できます。
↓より細かな操作方法などはこちらで解説。
以上がアトラス画像を扱う方法です。
事前準備の設定
事前準備は最初からパーティクルが放出された状態にする処理です。

有効化すると再生時間が0の状態でも事前にパーティクルが発生した挙動になります。

ビルボード設定
ビルボードとは画像の表示方式の1つです。
初期状態だと常に視線に平行になるように表示されます。

試しにレンダラー → レンダーモードを水平ビルボードに変更。

すると視線ではなく地面に平行な状態で表示されるようになります。


これを応用すれば魔法陣みたいなものが作れますね。
以上がパーティクルの基本的な考え方と使い方
まとめ
今回はUnityのパーティクルについて基本的な考え方と使い方を紹介しました。
・パーティクルの基本はX,Y,Zの位置情報
・位置情報に「画像」か「3D」モデルを読み込み動かすことで形が作られる
・移動した際の軌跡はトレイルで操作可能
・トレイルには「画像」情報だけ割当てれる
・あとは様子をみながらパラメーターを操作して試行錯誤
また、他にもUnityについて解説してます。
ぜひ、こちらもご覧ください。






コメント