『Unity』パーティクルシステム完全攻略:メインモジュール前編(シリーズ1)

Unity(デザイナー向け)
スポンサーリンク

はじめに

『Unity』でエフェクト制作を行うデザイナーにとって、 『Particle System』 は最も身近な相棒です。
しかし、中級者への階段を登るためには「なんとなくの調整」を卒業しなければなりません。
各パラメータが内部でどのように計算され、プロジェクト全体の設定とどう干渉し合っているのかを正確に把握する必要があります。

本シリーズでは、 『Particle System』 の全項目を網羅し、その仕様詳細を解き明かしていきます。
第1回は、すべての根幹となる “メインモジュール” の前半部分、特に「時間の支配」と「重力の物理的背景」に焦点を当てます。


スポンサーリンク

ステップ0:正確な検証のための準備

中級者以上の作業では、正確な見た目のフィードバックが不可欠です。
重なりや色の変化を正しく評価するために、検証用のマテリアルを以下の手順で作成してください。

  1. Project ウィンドウで右クリックし、 “M_Debug_Additive” という名称でマテリアルを新規作成します。

  2. インスペクターの最上部、 Shader をクリックし、 Universal Render Pipeline > Particles > Unlit を選択します。

  3. Surface Type を “Transparent” 、 Blending Mode を “Additive” に設定してください。

  4. Base Map には標準アセットの “Default-Particle” を割り当てます。

この「加算・白」の状態は、粒子の密度や寿命による消え際の挙動を最もシビアにチェックできる、エフェクトデザイナーにとっての「原点」となります。


スポンサーリンク

時間の支配:再生とループの論理構造

インスペクター最上部に位置するメインモジュールの設定群は、エフェクトの「一生」を定義するエンジンのような役割を果たします。

“Duration” と “Looping” の真実

“Duration” は、エフェクトの「1サイクル」の長さを秒数で指定する項目です。
“Looping” が有効な場合、この時間が経過するとエフェクトは再び 0秒時点から再生を繰り返しますが、ここで多くのデザイナーが誤解しやすいポイントがあります。

“Duration” は粒子の寿命を決定するものではありません。
粒子自体の寿命は後述する “Start Lifetime” で決まります。

例えば、
“Duration” を 1秒にし、 “Start Lifetime” を 5秒に設定した場合、
エフェクトは 1秒ごとに新しいサイクルを開始し、古いサイクルで生まれた粒子は消えずに残り続けます。
これにより、ループが重なることで密度が上がっていく演出が可能になります。

待機と先読み: “Start Delay” と “Prewarm”

“Start Delay” は、再生のトリガーが引かれてから粒子が実際に放出されるまでの待機時間です。

一方で、 “Prewarm” は非常に特殊な挙動を示します。
これが有効な場合、エフェクトが開始された瞬間に「すでに 1サイクル分(Duration分)の再生が終わった状態」からスタートします。
「滝やたき火のように、プレイヤーがその場所を訪れた瞬間に、すでに安定して流れているべき演出」には必須の設定です。
ただし、再生開始時に 1サイクル分の計算を一瞬で行うため、あまりに大量の粒子をプリウォームさせると、瞬間的な処理負荷(スパイク)の原因になります。

大量配置する際は、 “Duration” を必要最小限に留めるのが中級者の知恵です。


スポンサーリンク

物理の根幹: “Gravity Modifier” とプロジェクト設定

デザイナーが最も頻繁に調整する項目の一つが “Gravity Modifier” ですが、この数値は「プロジェクト全体の物理設定」に対する倍率として機能しています。

プロジェクトの重力設定を確認する

『Unity』には、プロジェクト全体の重力を一括管理する場所があります。
Edit > Project Settings > Physics (あるいは Physics 2D )の中にある “Gravity” の項目を確認してください。
デフォルトでは Y軸に “-9.81” という、地球の重力に近い数値が入っているはずです。

重力の計算ロジック

“Gravity Modifier” の数値は、このプロジェクト設定値に対する「掛け算」です。

  • “1.0” の場合:プロジェクト設定の通り、秒速 9.81m で加速。

  • “0.1” の場合:プロジェクト設定の 10% の力でゆっくり落下。

  • “-1.0” の場合:重力が反転し、上に向かって加速。

ここで重要なのが、ゲームの仕様で「特定のフィールド(水の中など)に入ると重力が変わる」という設計がなされている場合です。
スクリプトから Physics.gravity の値を変更すると、 “Gravity Modifier” を使っているすべてのパーティクルも連動して動きが変わります。

フィールドごとに重力を変動させるゲームの場合、エフェクトが意図しない挙動になる可能性があります。
もしプロジェクト設定の影響を受けたくない、常に一定の挙動をさせたい場合は、 “Gravity Modifier” を 0 に保ち、代わりに “Velocity over Lifetime” などのモジュールで自律的な移動を設計することを選択肢に入れてください。


スポンサーリンク

生存期間の設計: “Start Lifetime”

“Start Lifetime” は、一粒の粒子が生まれてから消滅するまでの時間を定義します。

中級者としてのポイントは、ここでも数値の右側にある「▼」から “Random Between Two Constants” を活用することですが、単なるランダム化以上の意味を持たせましょう。
例えば、すべての粒子の寿命を 2秒に固定すると、消滅するタイミングが揃いすぎて「エフェクトの終わり際」が不自然にパッと消えて見えます。
1.5秒から 2.5秒のように幅を持たせることで、消滅のタイミングが分散され、情緒的なグラデーションを生むことができます。


スポンサーリンク

おわりに

今回は、メインモジュールにおける「時間」と「重力」の深い関わりについて解説しました。
プロジェクト全体の物理設定が、デザイナーの作った一粒のパーティクルにまで影響を及ぼしているという視点は、開発の規模が大きくなるほど重要になります。

次回は、メインモジュールの後半戦。
エフェクトの移動空間を定義する “Simulation Space” や、複雑な「スケーリング」の仕様について徹底的に解説します。

タイトルとURLをコピーしました