ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Unity - パーティクルシステムを使ってエフェクトを作る

初めに

 Unity では、パーティクルシステム(Particle System)を使って煙や雲、炎、液体などエフェクトを表現することができます。本記事では、パーティクルシステムの基本的な操作をまとめます。



パーティクルシステム

パーティクルシステム(Particle System)とは

 パーティクルとは、直訳では粒子を意味します。Unity におけるパーティクルシステムは大量の2Dの画像を生成し、アニメーション化することによって、液体や雲、炎などの流体をシミュレーションします。




youtu.be

パーティクルシステムの生成

 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つから指定したアクションを実行させることができる。
  • Disable:ゲームオブジェクトを無効にする
  • Destroy:ゲームオブジェクトを破棄
  • Callback:OnParticleSystemStopped コールバックがゲームオブジェクトにアタッチされたスクリプトに送信される
システムは、すべてのパーティクルが消滅し、また、システムの寿命が Duration を超えたときに停止したと判断されます。 ループシステムの場合、これはスクリプトを使ってシステムを停止する場合にのみ発生します。
Culling Mode パーティクルがオフスクリーンのときにパーティクルシステムのシミュレーションを一時停止するかどうかを次から選択する
  • Automatic:ループするシステムは Pause を使用し、他のすべてのシステムは Always Simulate を使用
  • Pause And Catch-up:オフスクリーンでシミュレーションを停止。ビューに再入力すると、シミュレーションは大きなステップを実行し、一時停止していなかったら到達していたであろうポイントに到達する。複雑なシステムでは、このオプションを使用するとパフォーマンスが急向上する可能性がある。
  • Pause:オフスクリーンでシミュレーションを停止
  • Always Simulate:システムは、シミュレーションが画面上にあるかどうかにかかわらず、各フレームでシミュレーションを処理する。これは、シミュレーション中に明らかになる花火などのワンショットエフェクトに使う
Ring Buffer Mode パーティクルが Max Particles に達するまでパーティクルを生存させる。パーティクルが Max Particles に達すると、生存期間が終了したパーティクルを除去する代わりに、新しいパーティクルは古いパーティクルをリサイクルする
  • Disabled:生存期間が終了したパーティクルが除去される。
  • Pause Until Replaced:Max Particle の制限値に達するまで、生存期間の終了時点の古いパーティクルを一時停止し、制限値に達した時点で、システムはそれらを再利用する。そのため、古いパーティクルは新しいパーティクルとして再出現する。
  • Loop Until Replaced:生存期間が終了すると、Max Particle の制限値に達するまで、パーティクルは生存期間の指定された割合に巻き戻される。Max Particle に達すると、システムはそれらをリサイクルし、新しいパーティクルとして再度現れる。

エフェクトの作成

キラキラ

 次のようなキラキラのエフェクトを作ってみます。

youtu.be

  1. テクスチャの素材となる画像を入手する
     今回は、使った素材は「いらすとや」さんのイラストになります。

    www.irasutoya.com

    ※色は Unity 上で変化させるほうが楽なので、本当は白色の画像のほうがよいです。色付きのものだと色の変更が面倒です。

  2. Particle System を生成する
  3. 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にチェックを入れる(時間経過でパーティクルのサイズが大きくなるようにする)

  4. テクスチャの設定をする

    • Sprite を Particle System の Inspector にドラッグ&ドロップし、Material を変更
    • Shader を Mobile > Particles > Alpha Blended に変更



(確認)
 Scene ビューから確認できます。

youtu.be

参考

docs.unity3d.com

(各モジュール)
docs.unity3d.com

(Size by Speed モジュール)
docs.unity3d.com

gameanimation.info

最後に

  • Particle System を使い、大量の2Dの画像を生成し、アニメーション化することによって、液体や雲、炎などの流体をシミュレーションできる
  • モジュールごとに設定をする