ぷるぷるの雑記

低レイヤーがんばるぞいなブログ. 記事のご利用は自己責任で.

UnityのParticle Systemの基礎を理解する

はじめに

Unity上で形のあるものを表現するにはゲームオブジェクトが適しているが、形がないもの(液体や炎やビームなど)をゲームオブジェクトで表現するのは難しい。こういった不定形のものを表現するのに適したシステムがParticle Systemである。このParticle Systemだが、設定できる要素が多くどうすればよいのか忘れがちなので、特に重要そうなMainモジュール、Emissionモジュール、Shapeモジュールについてまとめてみた。

Particle System のモジュールとは

Particle Systemの設定は多岐にわたるので、モジュールと呼ばれる区分ごとに設定をするようになっている。例えば、全般的な設定はMainモジュール、放出されるパーティクルの個数はEmissionモジュールをいじることになる。このうち、Mainモジュールは必ず適用されるが、逆に言えばその他のモジュールは必ずしも有効にする必要はない。

f:id:prupru_prune:20220211150322p:plain
Inspector上のParticle Systemのモジュールたち

Mainモジュール

このモジュールではParticle Systemの寿命やループ設定など全般的な設定をすることが出来る。

f:id:prupru_prune:20220211151412p:plain
Mainモジュール. このモジュールは必ず適用されるのでチェックボックスがない

Duration

Particle Systemが再生されてからパーティクルを放出し続ける時間

Looping

Particle Systemの再生をループさせるかどうか

Start Delay

Particle System が再生されてから実際にパーティクルを放出し始めるまでのオフセット。使いどころがいまいちわからない

Start Lifetime

(Particle Systemではなく)個々のパーティクルのライフタイム(寿命)。Durationの時間とは独立しており、あくまでパーティクルが生成されてからの寿命を表す。例えば、DurationとStart Lifetimeが共に5.00秒の場合、全てのパーティクルが消滅するのは再生から10.0秒後となる。

Start Speed

パーティクルの生成時の速さ(速度ではない)。速度の向きはShapeモジュールで設定する。

3D Start Size

Start Size の値をxyz軸ごとに指定するかどうか

Start Size

パーティクルの生成時のSize

3D Start Rotation

Start Rotation の値をxyzごとに指定するかどうか

Start Rotation

パーティクルの生成時のRotation

Start Color

パーティクルの生成時のColor

Gravity Modifier

パーティクルの質量?
単位はkg?
0にすればパーティクルは重力の影響を受けない

Simulation Space

Localにすると放出済みのパーティクルでもParticle System を動かすと追従するようになる。Worldにすると放出済みのパーティクルがParticle Systemに追従しない。おそらくWorldにすることがほとんど。ビームサーベルのようなものをParticle System で作るならLocalのほうが良いかも。Customはよくわからん。

Play On Awake

オブジェクト生成時にParticle Systemを再生させるかどうか

Max Particles

このParticle Systemが含むことが出来るパーティクルの最大数。これを超えるとパーティクルの一部が自動的に削除される

その他の項目

おそらく自分でいじることは当分ないので保留

Emissionモジュール

このモジュールではParticle Systemから放出される単位次元ごとのパーティクルの数(Rate)を設定することが出来る。単位次元には時間か距離を指定できる。

Rate Over Time

単位時間ごとに放出されるパーティクル数

Rate Over Distance

Particle System が付与されたオブジェクトの単位移動距離ごとに放出されるパーティクル数

Bursts

上の2つの項目とは異なり、(デルタ関数のように)瞬間的にパーティクルを放出するイベント
Rate Over Time とRate Over DistanceとBurstsは共存させることが出来る。言い換えると、Burstsだけを有効にしたい場合は、ほかのRateを0にしてやる必要がある。

  • Time...Particle System が再生されてから最初のショットをし始める時刻
  • Count...ワンショットで放出されるパーティクル数
  • Cycles...Burstsを何回かり返すか
  • Interval...Burstsを2Cycles以上にした時の、ワンショットごとの間隔
  • Probability...パーティクルが生成される確率

例えば、次の図のようにBurstsを設定しよう

f:id:prupru_prune:20220211184027p:plain
Butstの設定
そうすると、次のようにパーティクルが放出される

streamable.com

動画だと少しわかりにくいが、2サイクルのBurstsと3サイクルのBurstsが同時に再生されている。

マシンガンのようなオブジェクトにはRate Over Time、ショットガンのようなオブジェクトにはBurstsを使うのが良いか?

Shapeモジュール

このモジュールではShapeやテクスチャを指定することでパーティクルの生成位置や速度の向きを設定することが出来る。生成位置や速度の向きをランダムにする必要がない場合(ライフルの銃口から発射される弾丸など)は、このモジュールを有効にする必要はない。パーティクルの速さはMainモジュールで指定するのに、速度の向きはShapeモジュールで決まるのがすこし気持ち悪いが、Shapeモジュールは必ず有効にするとも限らないのでそういう仕様になっているのだろう。

Shape

パーティクルの初速度の向き、生成箇所のもとになる形状
Shapeごとにradiusやarcなどの項目が現れるが、見たままの意味なので適当にいじればいいと思う。

Aligned To Direction

チェックが入っていなければBillboardはカメラ方向をLookAtする。
チェックが入っていると、Billboardがパーティクルの初速度に直行する面になる。
あくまでパーティクル生成時のBillboardの向きを表していて、Rotation Over Lifetimeと共存させることが出来る。

f:id:prupru_prune:20220211190510p:plain
チェックが入ってないとBillboardがカメラ方向を向く
f:id:prupru_prune:20220211190551p:plain
チェックが入っているとBillboardは初速度に対して直行する



以上、自分に理解できた範囲でのParticle Systemのメモを書いてきましたが、『Unityゲームエフェクトマスターガイド』という本により詳しく書いてあります。 とても参考になるおすすめの本です