第06回 爆発
今回の授業内容
- 中心の光、外へ飛ぶ火花、最後に残る余韻を組み合わせる
- 発生時刻と寿命を一つずつ調整し、爆発の時間変化を説明する
- すべての子の再生後に親全体が消えるPrefabを保存する
爆発の各要素が発生して消えるまでのタイミング
爆発では、最初の光が瞬間を、火花が広がる勢いを、煙が余韻を伝えます。最初はFlash・Sparks・Smokeの3要素で役割を分けます。衝撃波と炎は選択して追加できます。
開始状態と補助スクリプト
授業用URPプロジェクトでLesson06.unityを作り、第01回と同じカメラを使います。第04回のHitEffectからFlashとSparks、第05回のSmokeを使います。前の成果物がない場合は、各回の火花とフラッシュ、煙の基本設定を作成してから進めます。既存Prefabを編集する場合は複製を作り、元の作例を残してください。
終了処理には、補助スクリプトのZIPを使います。第04回で取り込み済みなら再取り込みは不要です。未導入の場合は展開したAssets/Scripts/DestroyAfterParticles.csと同名の.metaを、自分のプロジェクトのAssets/Scriptsへコピーします。コードの編集は不要です。
親と子の構成
- Explosion
- Flash
- Sparks
- Smoke
空の親Explosionを原点に作り、各要素を子として配置します。親のPositionとRotationを0、Scaleを1にし、子のLocal Positionを0にします。SmokeのRotationは上へ発生する第05回の向きを使います。
各子に終了用のスクリプトは付けず、親だけにDestroy After Particlesを追加します。既存のHitEffectから流用する場合は、子だけをこの親へ移し、終了補助を持つ親を二重に入れないでください。
| 全ての子に共通する項目 | 設定と理由 |
|---|---|
| Looping | Off。一度の発生にする |
| Play On Awake | On。親の生成時に再生する |
| Duration | 0.5秒。粒子の寿命とは別の発生区間 |
| Stop Action | None。親の補助処理に削除を任せる |
| Rate over Time | 0。ループ由来の連続発生を止める |
第03回の単独Particle SystemはStop Action: Destroyで削除できます。第04回と今回の複合エフェクトでは、各子の削除だけでは空の親が残るため、親で全体の終了を待ちます。
中心の光と火花
まずSmokeを無効にし、FlashとSparksを調整します。
| 要素 | BurstのTime / Count | Start Lifetime | Start Speed | Start Size | Start Delay |
|---|---|---|---|---|---|
| Flash | 0 / 1 | 0.1秒 | 0 | 1.2 | 0秒 |
| Sparks | 0 / 20 | 0.5秒 | 6 | 0.08 | 0秒 |
BurstはCyclesを1にします。FlashのShapeは無効、SparksはSphere・Radius 0.05にします。両方ともAdditiveのMaterialを使い、Color over LifetimeのAlphaを1→0へ、SparksのSize over Lifetimeを1→0へ変えます。
編集時はSceneビューのParticle Effectパネルで単独再生できます。Play Modeでは親の終了補助が動くため、最後の要素が終わると親も消えます。再び調整する場合はPlay Modeを終了してください。
最後に残る煙
Smokeを有効にし、FlashとSparksを一時的に無効にして煙だけを確かめます。第05回のLoopingをOffへ、Rate over Timeを0へ変更し、BurstをTime 0、Count 8、Cycles 1にします。Start Delayは0.08秒、Start Lifetimeは2秒、Start Speedは0.5、Start Sizeは0.6を開始値にします。
MaterialはAlpha合成です。Color over LifetimeのAlphaを0→1→0、Size over Lifetimeを1→2にし、上へ広がって消えるようにします。Noiseは第05回で採用した弱い値から使います。
煙が出続ける場合はLoopingとRate over Timeを、すぐ消える場合はStart LifetimeとAlphaのカーブを確認します。煙が単独で成立したらFlashとSparksを有効へ戻し、親を再生してください。
時間差を一つずつ変える比較
基準のExplosionを複製して無効に残し、有効な親を一つにして比較します。
- 同じカメラで基準を再生し、Flashが先に消え、煙が最後に残ることを記録します。
- Play Modeを終了し、SmokeのStart Delayだけを0.08秒から0.3秒へ変えます。
- 光と煙が一つの出来事に見えるか予想して再生し、比較後は0.08秒へ戻します。
- 今度はSmokeのStart Lifetimeだけを2秒から3秒へ変え、余韻と画面の読みやすさを比較します。比較後は2秒へ戻します。
- 採用する値を選び、役割と理由を記録します。
粒子が一時的に0個になる時間があっても、開始遅延中のSmokeがあるなら親は残る必要があります。補助処理は、現在の粒子に加えてこれから発生する予定も確認します。試験用にSmokeのStart Delayを1秒へ変えて確かめた後は、採用値へ戻してください。
選択課題:衝撃波と炎
衝撃波は、動かない一粒にリング状の画像を使い、Size over Lifetimeで外へ広げます。炎は第05回のループをBurstへ変え、煙より短い寿命にします。どちらも子として追加し、共通のワンショット設定をそろえます。
Flipbook素材を使う場合は、第05回のTexture Sheet Animationでコマ数と寿命を対応させます。素材の再生速度を変えたときは、他の要素を固定して比較してください。
全体の終了と保存
- 再生に使う子をすべて有効へ戻し、共通設定を確認します。
- Play Modeで、Flash終了後も煙が残り、煙が消えてからHierarchyのExplosionも消えることを確認します。
- Play Modeを終了し、採用する設定を編集モードで保存します。
- 親をProjectのPrefabsへドラッグし、
Explosionとして保存します。 - SceneへPrefabを配置し直し、位置を変えて再生・終了が同じように働くか確認します。
親が消えない場合は、子のLooping、遅延・寿命、補助コンポーネントを確認します。途中で消える場合は、補助が親だけに付いているか、必要な子が有効でPlay On AwakeがOnかを確認します。
授業内課題と完成条件
- 中心の光・外向きの火花・後半の余韻の3役が分かる
- 全要素が一度だけ再生され、色とサイズが寿命に沿って変化する
- 一つの時間設定を変えた比較から、採用理由を説明できる
- 最後の粒子の終了後に親全体が消え、Prefabの再配置でも再生できる
短い動画または時間変化が分かる画像と、各子の役割・変更した時刻や寿命を提出します。SceneをLesson06.unityとして保存してください。
終了補助の仕組み
DestroyAfterParticles.csは有効な子のParticle Systemを調べ、IsAliveがすべてfalseになった後、親を削除します。寿命や遅延を変えるたびに、削除までの秒数を手で指定し直す必要はありません。