Unity - パーティクルシステムを使ってエフェクトを作る
初めに
Unity では、パーティクルシステム(Particle System)を使って煙や雲、炎、液体などエフェクトを表現することができます。本記事では、パーティクルシステムの基本的な操作をまとめます。
Index
パーティクルシステム
パーティクルシステム(Particle System)とは
パーティクルとは、直訳では粒子を意味します。Unity におけるパーティクルシステムは大量の2Dの画像を生成し、アニメーション化することによって、液体や雲、炎などの流体をシミュレーションします。
パーティクルシステムの生成
Hierarchy で右クリック > Effects > Particle System をクリックすることで、生成することができます。
Scene ビューで確認すると、下の画像のように粒子が飛んでいるアニメーションが追加されます。
Scene ビュー、Particle Effect パネル
Scene ビューでは、パーティクルシステムのプレビューができます。Particle System を選択すると、Scene ビューの右下に Particle Effect パネルが表示されます。Particle Effect パネルにはプレビューのオプションが表示されています。
機能 | 説明 |
---|---|
Play/Pause | アニメーションのスタート/一時停止 |
Restart | アニメーションの再スタート |
Stop | アニメーションの中止 |
Playback Speed | アニメーションの再生速度 |
Playback Time | アニメーション開始からの経過時間 |
Particles | 現在のパーティクルの数 |
Speed Range | 基本的にはSize by Speed モジュールを使用する場合に使う 表示される Size by Speed の速度範囲の下限と上限 (範囲外の速度は、カーブの終点にマップされる) |
Simulate Layers | 選択していないレイヤーにあるパーティクルシステムがプレビューできる |
Resimulate | このプロパティを有効にすると、すでに生成されたパーティクルにプロパティの変更を即座に適用する |
Show Bounds | このプロパティを有効にすると、パーティクルが表示される範囲の境界が見えるようになる |
Show Only Selected | このプロパティを有効にすると、選択されていないすべてのパーティクルシステムが非表示になる |
パーティクルシステムモジュール
パーティクルシステムコンポーネントを確認すると、「モジュール」と呼ばれる折りたたみ式のセクションに分け、機能が整理されています。各モジュールのバーをクリックするとモジュールの開閉ができます。
モジュール | 説明 |
---|---|
Particle System | パーティクルシステム全体を制御する 説明は後述 |
Emmision | 放出するパーティクルの数について制御する |
Shape | 放出できるパーティクルの大きさやテクスチャ、方向などを制御する |
Velocity Over Lifetime | パーティクルの生存期間中の速度の制御ができる |
Noise Module | パーティクルの動きに乱気流/ノイズを追加する |
Limit Velocity over Lifetime module | 生存期間にわたってパーティクル速度がどのように減衰するかを制御する |
Inherit Velocity | 親パーティクルから速度を読み取り、サブエミッタ パーティクルの速度が時間の経過とともにその速度にどのように反応するかを制御する 車の排気ガスやロケットの噴射、蒸気機関車の煙突から出る蒸気など、動いているオブジェクトからパーティクルを放出する場合や、パーティクルを放出するオブジェクトの何割かの速さで、パーティクルが移動しているようなときに役立つ |
Lifetime by Emitter Speed | パーティクルが生成するときの放出速度に基づいて、各パーティクルの初期生存期間を制御する |
Force over Lifetime | このモジュールで設定した力(風、引力など)によって加速させることができる |
Color over Lifetime | パーティクルの色と透明度が生存期間の時間経過によってどう変化するかを設定できる |
Color by Speed | 毎秒の距離ユニットの速度にもとづいて変化するように、パーティクルの色をこのモジュールで設定できる |
Size Over Lifetime | パーティクルの大きさをカーブによって設定 |
Size by Speed | 1秒毎の移動距離に基づく速度に応じてパーティクルの大きさを変化させることができる |
Rotation over Lifetime | 移動に伴うパーティクルの回転の制御 |
Rotation by Speed | 1秒毎の移動距離に基づく速度に応じてパーティクルの回転の制御 |
External Forces | システムから放出されたパーティクルに Wind Zone と Particle System Force Fields の効果を調整する |
Collision | パーティクルがシーン内のゲームオブジェクトと衝突する方法を制御 |
Triggers | コライダーに接触するときにコールバックを発するようにすることができる |
Sub Emitters | Sub Emitter (サブエミッター) の設定 サブエミッター:生存期間のある特定の段階のパーティクルの位置で生成される、追加のパーティクルエミッター |
Texture Sheet Animation | テクスチャを、アニメーションのフレームとして再生できるグリッド状に区切られたサブイメージとして扱えるようにする |
Lights | 指定した割合でパーティクルにリアルタイムライトを加える |
Trails | パーティクルに Trail(トレイル)を加える Trail:シーン内でオブジェクトが動くときに、その後ろに作成される軌跡 |
Custom Data | パーティクルにアタッチするカスタムのデータ形式をエディターで定義できる |
Renderer | パーティクルの画像や メッシュ がどのように他のパーティクルによって変形、シェード、上書きされるかを決定する |
Particle System モジュール
パーティクルシステム全体に影響する設定をします。ほとんどが新たに作られたパーティクルの初期状態を制御します。
機能 | 説明 |
---|---|
Duration | システムが実行する時間の長さ |
Looping | 有効にすると、システムが継続時間の終了時に再び開始し、そのサイクルを継続的に繰り返す |
Prewarm | 有効にすると、システムはまるで、すでにサイクルを 1 回完了したかのように初期化される ( Looping が有効であるときにのみ、動作します) |
Start Delay | 有効にすると、システムがパーティクルの放出を始める前に数秒遅延する |
Start Lifetime | パーティクルの最初の生存期間 |
Start Speed | 任意の方向への各パーティクルの初速 |
3D Start Size | 各軸のサイズを別々に制御したい場合は、これを有効にする |
Start Size | 各パーティクルの最初のサイズ |
3D Start Rotation | 各軸の回転を別々に制御したい場合は、これを有効にする |
Start Rotation | 各パーティクルの最初の回転角度 |
Flip Rotation | いくつかのパーティクルを反対方向にスピンさせる |
Start Color | 各パーティクルの最初の色 |
Gravity Modifier | Physics ウィンドウで設定する重力値をスケールする。値を 0 にすると重力が無効になる |
Simulation Space | パーティクルを親オブジェクトのローカル空間でアニメーションするか(親オブジェクトと一緒に動きます)、ワールド空間でアニメーションするか、または、カスタムのオブジェクトに関連させるか (選択したカスタムのオブジェクトと一緒に動きます) を制御する |
Simulation Speed | システム全体を更新するスピードを調整 |
Delta Time | Scaled と Unscaled から選択する。 Scaled は Time ウィンドウの Time Scale の値を使用し、Unscaled はその値を無視します。(ポーズ画面など Time Scale を調整する場合に使用) |
Scaling Mode | トランスフォームのスケールの使用方法を Hierarchy、Local、Shape のいずれかに設定 Local:パーティクルシステムのトランスフォームスケールのみを適用し、親はすべて無視します。 Shape :スケールをパーティクルの開始位置に適用し、サイズには影響しません。 |
Play on Awake | 有効にすると、オブジェクトが生成されたときにパーティクルシステムが自動的に開始する |
Emitter Velocity | Inherit Velocity モジュールと Emission モジュールで使用される速度を Rigidbody と Transform から選択 |
Max Particles | システムで、同時に存在できるパーティクルの最大数。限界数に到達すると、パーティクルの一部は削除される |
Auto Random Seed | 有効にすると、パーティクルの様子は再生される都度に異なる。無効にすると、パーティクルは毎回まったく同じに見える。 |
Random Seed | Auto Random Seed を無効にすると、特有の繰り返し可能なエフェクトを作成するためにこの値を使用する。 |
Stop Action | パーティクルシステムに属するすべてのパーティクルが終了すると、システムに次の3つから指定したアクションを実行させることができる。
|
Culling Mode | パーティクルがオフスクリーンのときにパーティクルシステムのシミュレーションを一時停止するかどうかを次から選択する
|
Ring Buffer Mode | パーティクルが Max Particles に達するまでパーティクルを生存させる。パーティクルが Max Particles に達すると、生存期間が終了したパーティクルを除去する代わりに、新しいパーティクルは古いパーティクルをリサイクルする
|
エフェクトの作成
キラキラ
次のようなキラキラのエフェクトを作ってみます。
- テクスチャの素材となる画像を入手する
今回は、使った素材は「いらすとや」さんのイラストになります。※色は Unity 上で変化させるほうが楽なので、本当は白色の画像のほうがよいです。色付きのものだと色の変更が面倒です。
- Particle System を生成する
- Particle System の設定を変更する
- Transfrom の Rotation をすべて 0 にする(正面を向かせる)
- Particle System の Start Speed を 0 にする(初速を 0 にし、動かないようにする)
- Particle System の Start Rotation を -20 ~ 20 にする(テクスチャが傾くようにする)
- Shape の Radius を 3 にする(パーティクルが生成される範囲を設定する)
- Color over Lifetime でアルファ値を 0, 255 としたものを交互に設置する(点滅するようにする)
- Size over Lifetimeにチェックを入れる(時間経過でパーティクルのサイズが大きくなるようにする)
- テクスチャの設定をする
- Sprite を Particle System の Inspector にドラッグ&ドロップし、Material を変更
- Shader を Mobile > Particles > Alpha Blended に変更
(確認)
Scene ビューから確認できます。
最後に
- Particle System を使い、大量の2Dの画像を生成し、アニメーション化することによって、液体や雲、炎などの流体をシミュレーションできる
- モジュールごとに設定をする