新しい粒子の放出位置と、放出済み粒子の動きを分ける
走るキャラクターの煙が体と一緒に移動する、追従させたいオーラが元の場所に残る場合は、Particle SystemのMainにあるSimulation Spaceを確認します。Emitterが動いて新しい粒子の発生位置が変わることと、すでに放出した粒子が座標系の移動を受けることは別の動きです。この記事はUnity 2022.3 LTSの標準Particle Systemを対象にしています。
1. 演出の意図からLocal・World・Customを選ぶ
- Local:粒子をParticle System側のローカル座標でシミュレーションします。親を含むTransformの移動や回転が、放出済み粒子にも反映されます。キャラクターへ付けるオーラなどの候補です。
- World:ワールド座標でシミュレーションします。放出済み粒子はEmitterの移動だけでは追従しないため、通過した場所へ残す煙などの候補です。粒子自身の速度・重力・Noiseなどによる運動は続きます。
- Custom:指定したTransformを座標の基準にします。Emitterとは別の移動グループへまとめて追従させたい場合に使い、Custom Simulation Spaceの参照先を確認します。
Transformの親子付けを変えるだけで直そうとせず、放出後の粒子をどの基準へ追従させたいか決めます。Localにしても、アニメーションするメッシュ表面へ既存粒子を張り付け続ける機能にはなりません。
2. 1回のBurstで同じ粒子を比較する
- 調査用のParticle Systemをカメラ内に置きます。Loopingを無効、Rate over Timeを0にし、時刻0のBurstを1回だけ設定します。
- Start Lifetimeを10秒程度、Start SpeedとGravity Modifierを0にし、NoiseやVelocity over Lifetimeなど粒子を移動させる追加モジュールを一時的に無効にします。これは座標系だけを比較するための設定です。
- 再生してBurstが出た後にParticle SystemのGameObjectを横へ動かします。Worldなら元の場所、LocalならEmitterと一緒に移動するか確認します。
- 停止・Clearしてから別のSimulation Spaceで再生します。CustomではEmitterと参照Transformを別々に動かし、どちらへ追従するか比較します。
新しい粒子が毎フレーム出ていると、以前の粒子との区別がつきにくくなります。Burstを1回にすることで、同じ粒子の位置を比較できます。生存中の粒子を残したまま空間を切り替える使い方は、見た目が保たれると決めつけず、別途検証してください。
3. 粒子本体とTrail・速度を別々に確認する
TrailsモジュールのWorld Spaceは、Trailの頂点をワールドに残すかを制御します。Local Simulation SpaceでもTrailをワールドへ残せるため、粒子本体だけ意図どおりなのに線が引き伸ばされる場合は、この設定とTrailの寿命も比較します。
Inherit VelocityはEmitterの速度を粒子の運動へ取り込むモジュールで、2022.3の説明ではWorld Simulation Spaceで作用します。Localへ変更しただけで同じ速度表現になるとは限りません。まず座標系のテストを終えてから、速度や力のモジュールを1つずつ戻します。
4. 再利用時のテレポートと残留粒子を確認する
ObjectPoolで使い回すエフェクトでは、前回の粒子が残る状態でEmitterだけを次の場所へ移していないか確認します。新しい独立した演出として再利用するなら、停止とClear、Transformの設定、再生の順序を所有者で管理します。
StopEmittingは新規放出を止め、既存粒子は残します。即座に消す用途ではStopEmittingAndClearが候補になりますが、煙を自然に消したい演出まで一律にClearしないでください。子のParticle Systemにも同じ終了・再利用方針が必要か確認します。
修正後の確認
- 直進・急旋回・停止・親の回転で、放出済み粒子と新規粒子を確認する。
- Scaleの問題はScaling Modeも調べ、Simulation Spaceの変更だけで判断しない。
- Trail・子エフェクト・再利用を含む元の構成へ戻し、連続再生する。
- 対象Playerで、カメラ外へ出た後の再表示やシーン移動も確認する。
図は粒子自身の速度と重力を0にした比較例です。通常のエフェクトへ戻したときは、座標系による追従と粒子自身の運動を合わせて確認します。