VRChatプレイヤーによるParticle System解説  ～Main Module編～

:::note warn
この記事はUnity 2019.4.29f1の記事です
:::
ここ  >> [Emission Module編](https://qiita.com/abcde_kind/items/63e8c262df7774f12a41)
# はじめに
この記事は**ちょっとParticle System触れるようになったけどまだまだ知らないパラメーターだらけで抵抗感がある人向け**にじゃあ全項目解説しようという記事です。

**パーティクル？シェーダー？憧れるけどよくわかんない…**という人は最近は[VRCUnity勉強会][link-1]などで初歩の初歩から解説してくれる講座などが解説されているのでそこに参加してみたりするといいでしょう。
[link-1]:https://discord.gg/mtvTTyM
その他にこの記事はアドベントカレンダーにしてParticle Systemの記事を増やしてパーティクルへの抵抗感を減らしてやろうという企みもあります。

##Main Moduleってどこ？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2386883/249ba1c6-cd2c-228f-d7f4-8a7d8e814f8f.png)
この上のいっぱい項目があるやつ

##本題
####Duration
デフォルト 5.0 (0.05~100,000)
単位 秒
パーティクルが何秒間出続けるかを決めるパラメーター
デフォルトでLoopingにチェックがついてるため分かりづらいが**〇〇 over Lifetime等の指定がない場合の横軸は基本これ**
####Looping
デフォルト ON
見て字の如くDurationを延々と繰り返させるパラメーター
要するに**パーティクルが永久に出るようになる**
####Prewarm
デフォルト OFF
Loopingにチェックが入ってないと使えないパラメーター
普通パーティクルが出てないところからスタートするところを、Durationが一周した**パーティクルが出ている状態からスタートさせる**
####Start Delay
デフォルト 0 (0~3.402823e+38)
単位 秒
Prewarmにチェックが入ってると使えないパラメーター
**オブジェクトがアクティブになってから何秒後にパーティクルが出るか決めるパラメーター**
複数のParticle Systemを組み合わせてエフェクトを作ったりする時によく使う
(厳密にはオブジェクトがアクティブになってからというのは正確ではないけど気にしないで)
####Start Lifetime
デフォルト 5 (0.0001~3.402823e+38)
単位 秒
**パーティクル1つ1つの寿命**
Startって書いてるってことは変化するのかって言うとCollisionの項目で一回衝突する毎にどれくらい寿命が減るかというのを弄れる、他にもSub Emittersに関係したりする
####Start Speed
デフォルト 5 (-100,000~100,000)
単位 m/秒 
**パーティクルが出てきたときのスピード**
はい
####3D Start Size
デフォルト OFF
実際試すとすぐわかるけど**Start SizeをXYZ軸で操作できるようにするパラメーター**
####Start Size
デフォルト 1 (0~100,000)
単位 倍
**パーティクルが出てきたときのサイズ**
3D Start SizeをONにするとXYZに分かれる
####3D Start Rotation
デフォルト OFF
実際試すとすぐわかるけど**Start RotationをXYZ軸で操作できるようにするパラメーター**
####Start Rotation
デフォルト 0 (-100,000~100,000)
単位 度
**パーティクルが出てきたとき何度傾いているか決めるパラメーター**
時計回りが基準
3D Start RotationをONにするとXYZに分かれる
####Flip Rotation
デフォルト 0 (0~1)
単位 割合
100%を1として**どれくらいの割合のパーティクルが左右反転して出てくるか決めるパラメーター**
左右非対称なパーティクルに使うと一気に玄人感が出る
####Start Color
デフォルト `rgba(255,255,255,1)`
**パーティクルが出てきたときの色**
頂点カラーを使用してる
####Gravity Modifier
デフォルト 0 (-100,000~100,000)
単位 倍
**重力の影響をどれだけ受けるか決めるパラメーター**
ワールドによって変わることがあるため基本的にForce over Lifetimeでいい
####Simulation Space
デフォルト Local
**パーティクル全体がどこの座標を基準に動くかを指定するパラメーター**
LocalとWorldに切り替えてみてパーティクルを放出している時にParticle Systemのオブジェクトを動かしてみるとどういうことかわかりやすい
####Simulation Speed
デフォルト 1 (0~100)
単位 倍
**パーティクルの動き、放出速度等全ての動きにかかる倍率**
数値が小さくなると負荷が大きくなり数値が大きくなると軽くなる
パーティクルが出てる状態からアニメーション等で0にするとその時出てるパーティクルが停止するので色々使える
####Delta Time
デフォルト Scaled
**VRCではまず使わない**
Time Scaleの値を使用するかどうか決めるパラメーター
####Scaling Mode
デフォルト Local
**Particle System全体のスケールとパーティクル1つ1つのサイズがどこのTransformに依るか決めるパラメーター**
Localだとこのオブジェクトのみ、Hierarchyにすれば親のオブジェクトも、ShapeにするとShapeにのみTransformが影響しパーティクルのサイズは変わらない
####Play On Awake
デフォルト ON
**オブジェクトがアクティブになったときにパーティクルを再生させるかどうか決めるパラメーター**
アバターで使ったりパーティクルライブで使ったりする分には全く使わない
####Emitter Velocity
デフォルト Rigidbody
**ここの説明をして分かる人に説明はいらない**
Rate over DistanceとかInherit Velocityに影響する
####Max Particles
デフォルト 1000 (0~2,147,483,647)
単位 個
**同時に出るパーティクル数の上限**
上限と言ってもこのParticle Systemのパーティクルの話、上限に到達すると古めのパーティクルがごっそり消える
####Auto Random Seed
デフォルト ON
**ONにするとパーティクルの出方等のランダム要素がパーティクルが出てくる毎に変化するようになる**
OFFにするとランダム要素を固定できるようになり、下記のRandom Seedというパラメーターが出てくる
#####Random Seed
**右のReseedボタンを押すとランダム要素ガチャを回せる**
####Stop Action
デフォルト None
**パーティクルの再生が終わった瞬間どういう動作をするか選べる**
Loopingを切った状態で使うのが普通
####Culling Mode
デフォルト Automatic
**パーティクル全体が画面外にあるときパーティクルの再生を一時停止するかどうか決めるパラメーター**
大体Automaticでいいがたまに変えることがある、内容は見たら何となく分かる
####Ring Buffer Mode
デフォルト Disabled
**Max Particlesに到達するまでパーティクルが出続ける(古いパーティクルから順番に消える)かどうか決めるパラメーター**
Pause Until ReplacedはLifetimeを超えたパーティクルの〇〇 over Lifetime等の最後の状態を維持する
Loop~はパーティクルが存在してる間は指定した範囲のアニメーションを再生し続け、
上限に達して消えるパーティクルは最後までアニメーションが再生される(つまり**上限を超えたパーティクルが存在することになる**)
これ使うと玄人っぽい
#おわり
というわけでMain Moduleの全項目の解説をしました
これ以降のModuleの解説もする予定なのでお楽しみに
****
ここ  >> [Emission Module編](https://qiita.com/abcde_kind/items/63e8c262df7774f12a41)