ゴイサギ日記

東京でエンジニアとして頑張って何とか生きてます。。ゆる~く更新していきます

【Unity】Shuriken Particle Part2 モジュール前編

前回に引き続き「Shuriken」パーティクルの機能をまとめてみました。
確認バージョンは 2017.3.0f3

モジュール

前回に説明したメインモジュール以外のモジュール群をまとめてみました。

Emission

パーティクルの発生数を設定します。Rate over time は1秒間の発生数を設定します。Rate over distance はエミッターの位置を1ユニット移動させた場合の発生数を設定します。また、Bursts は任意のタイミングで大量のパーティクルを発生させる処理(以下:バースト)を設定します。Timeで開始時間(秒)、Countでパーティクルの発生数、Cyclesはバーストを何回行うか設定します。Interval は Time で設定した時間から次のバーストまでの間隔(秒)を設定します。
f:id:akt3106:20180306081449g:plain

Shape

パーティクルをどのような形状から放出するか設定します。Meshは設定したポリゴンの表面からパーティクルを放出します(下図のMeshは板ポリゴンを設定しています) f:id:akt3106:20180227234425g:plain

Velocity over Lifetime

パーティクルが生存中の速度変化を設定します。 f:id:akt3106:20180227234409p:plain

Limit Velocity over Lifetime

パーティクルが生存中の速度制限を設定します。 f:id:akt3106:20180227234930g:plain

Inherit Velocity

親オブジェクトが移動した際にパーティクルの速度がどのように反応するかを設定します。有効にするには Simulation Space を World に設定する必要があります。

Force over Lifetime

パーティクルが生存中に受ける外力を設定します。例としては風とかです。

Color over Lifetime

生存中のパーティクルの色とα値を設定します。寿命が近づくにつれてαフェードさせるなどの表現が設定できます。
f:id:akt3106:20180228095835g:plain

Color by Speed

パーティクルの速度に応じた色とα値を設定します。Speed Range はこの設定が適用される速度の範囲を設定します。
f:id:akt3106:20180228095820g:plain

Size over Lifetime

生存中のパーティクルのサイズを設定します。寿命が近づくにつれてサイズを小さくするなどの表現が設定できます。
f:id:akt3106:20180228100021g:plain

Size by Speed

パーティクルの速度に応じたサイズを設定します。
f:id:akt3106:20180228100009g:plain

Rotation over Lifetime

生存中のパーティクルが1秒間に何度回転するかを設定します。前述の Start Rotation は発生時の角度ですがこちらは秒間の回転角度を指します。
f:id:akt3106:20180228095952g:plain

Rotation by Speed

パーティクルが速度に応じて1秒間に何度回転するかを設定します。坂を転がり落ちる岩の表現に使えます。Speed Range を設定すれば下図のように特定の速度を境に回転しだす表現もできます。
f:id:akt3106:20180228095939g:plain

External Forces

*1 Wind Zone と呼ばれる気流を設定できるオブジェクトの影響値を設定をします。設定値は乗数なので影響をより受けたい場合は 1よりも大きい値を設定します。
f:id:akt3106:20180228095901g:plain

Noise

パーティクルの粒子一つ一つに細かいランダムな動きを設定してより自然な動きに見せることができます。Separate Axes を有効にすればXYZの任意方向に対してのみ設定をすることもできます。
f:id:akt3106:20180228095924g:plain

Collision

ゲーム内のオブジェクトとパーティクルが衝突判定をする際の設定です。パーティクルが跳ね返ったりオブジェクトに沿って移動する等の表現が可能ですが衝突判定の計算負荷は高いので使用する場合は注意が必要です。TypeからPlaneとWorldどちらかを選択します。

Plane
無限平面とパーティクルの衝突判定を設定します。

パラメータ
説明
Planes 平面コリジョンを設定するTransformを設定します。
Visualization Sceneビューに表示される平面コリジョンの見え方を設定します。Scale Plane でサイズを変更できますがPlaneは無限平面との衝突判定なので表示されている平面の外側でも衝突判定が発生することに注意してください。
f:id:akt3106:20180303094634p:plain
Dampen 衝突後のパーティクルの減速率を設定します。減速させない場合は1.0、停止させる場合は0.0と 0.0〜1.0の割合で設定します。
f:id:akt3106:20180305095306g:plain
Bounce 衝突後のパーティクルの反発係数を設定します。衝突前と同じ速度で跳ね返すなら1.0、跳ね返さないなら0.0と 0.0〜1.0の割合で設定します。
f:id:akt3106:20180305095339g:plain
Lifetime Loss 衝突時にパーティクルの生存期間を減らす割合を0.0~1.0で設定します。下図、右のパーティクルは割合が設定されているのでワンバウンドすると消えています。
f:id:akt3106:20180305095359g:plain
Min Kill Speed 衝突後、この設定値より速度の遅いパーティクルは削除されます。下図、右のパーティクルはMin Kill Speedが設定されているためツーバウンド時に消えています。
f:id:akt3106:20180305095431g:plain
Max Kill Speed 衝突後、この設定値より速度の速いパーティクルは削除されます。
Radius Scale 衝突半径のスケールを設定します。平面ギリギリに衝突してパーティクルの見た目がめり込むのを防ぐ際に使用します。
f:id:akt3106:20180305095454g:plain
Send Collision Messages チェックを入れると衝突時にOnParticleCollisionを呼び出します。
Visualize Bounds チェックを入れるとSceneビューのパーティクルに衝突判定用の球コリジョンワイヤーフレームで表示されます。
f:id:akt3106:20180305095525p:plain

World
シーン内にある Collider とも衝突するように設定します。
※前述のPlaneと同じパラメータは省略しています。

パラメータ
説明
Collision Mode 衝突判定コリジョンを3Dか2Dの設定をします。
Collision Quality 衝突判定の精度を設定します。Highは最も精度が高いですが高負荷です。MediumとLowは*2ボクセルによる近似判定を行います。Mediumの方が各フレームで物理計算システムに問い合わせる回数が多いのでLowより負荷が高くなります。ボクセルによる判定はstaticなオブジェクトに対してのみ有効になります。
Voxel Size Collision QualityをMediumかLowを選択した場合に使用されるボクセルのサイズを設定します。
Collides With ここで選択したLayerが設定されたオブジェクトと衝突判定を行います。
Max Collision Shapes このパーティクルとの衝突判定を許可する衝突形状を設定します。例えば、Terrain以外の形状を無視して地面とのみ判定するなどの設定が出来ます。
Enable Dynamic Colliders チェックを入れると動的なコリジョンも判定対象にします。
Collider Force 衝突時にパーティクルが対象のコリジョンに力を加えます。パーティクルがコリジョンを押し出す設定がしたい場合に使用します。後述の Multiply by Collision Angle/Particle Speed/Particle Size と合わせて使用します。また、物理挙動になるため対象コリジョンにはRigidbody(Collision Modeが2D時はRigidbody2D)が設定されている必要があります。
Multiply by Collision Angle チェックを入れると、パーティクルとコリジョンの衝突角度が大きいほど衝突時の押し出す力が弱くなります。
f:id:akt3106:20180305224923g:plain
Multiply by Particle Speed チェックを入れると、衝突時のパーティクルの速度に応じて押し出す力が変動します。
f:id:akt3106:20180305225007g:plain
Multiply by Particle Size チェックを入れると、衝突時のパーティクルのサイズに応じて押し出す力が変動します。
f:id:akt3106:20180305225030g:plain
Triggers

パーティクルとコライダーの位置関係に応じた挙動を設定できます。コライダーとの内外判定は衝突判定と同様に負荷が高いので注意してください。

パラメータ
説明
Inside パーティクルがコライダーの内側にいる
Outside パーティクルがコライダーの外側にいる
Enter パーティクルがコライダー内に入った時
Exit パーティクルがコライダー外に出た時

設定できる挙動は以下になります。

パラメータ
説明
Ignore 何もしません。
Kill パーティクルを削除します。
Callback OnParticleTriggerを呼び出します。

*1:Wind Zone は 上部メニューの GameObject > 3D Object > Wind Zone で生成できます。

*2:https://www.jstage.jst.go.jp/article/journalam1998/6/0/6_0_131/_pdf