Unity パーティクルシステム超入門


Unityのパーティクルシステム(Shuriken)の初心者講座のメモ。
もともとは Shuriken て名前だったらしい。

登壇資料です
https://atnd.org/events/51622
http://www.slideshare.net/minorunakanou/unity-particle-systemforbeginner

![shuriken.jpg](https://qiita-image-store.s3.amazonaws.com/0/20773/5baa2fe1-4f47-14ed-5ab8-c93e02845303.jpeg "shuriken.jpg")


パーティクルを追加する
--------------------
**パーティクルシステムを追加する**
![new-particle.png](https://qiita-image-store.s3.amazonaws.com/0/20773/a5997c91-a3c4-b05d-0ce9-511d3f20bebd.png "new-particle.png")

GameObject > Create Other > Particle System
または、ヒエラルキーパネルの Create > Partice Sysyte

表示をテクスチャワイヤにしておくと見やすい（場合もある）
![texturewire.png](https://qiita-image-store.s3.amazonaws.com/0/20773/22736931-14a5-b9a8-d59a-f0ada659e443.png "texturewire.png")

**新規マテリアルつくる**
Project > Create > Material
![new-material.png](https://qiita-image-store.s3.amazonaws.com/0/20773/c310fb91-9357-c809-29e7-554e973b09d4.png "new-material.png")

**マテリアルのシェーダーをえらぶ**
Material の Inspector パネルの Shader から選択
![add-shader.png](https://qiita-image-store.s3.amazonaws.com/0/20773/b968b0b7-2e79-e1e9-b0c5-35ade6eff3c0.png "add-shader.png")

**マテリアルにテクスチャを設定する**
![set-shader.png](https://qiita-image-store.s3.amazonaws.com/0/20773/6dbe382a-078b-dc75-6e61-8f6fd06f8c4e.png "set-shader.png")

**パーティクルシステムにマテリアルをはる**
![set-material.png](https://qiita-image-store.s3.amazonaws.com/0/20773/184b81b8-550f-eb5a-104a-90237e3de0e0.png "set-material.png")


インスペクタ（基本項目）
--------------------
![param.png](https://qiita-image-store.s3.amazonaws.com/0/20773/be8a86ce-49f9-dfd7-7cc1-58255389fb10.png "param.png")

| パラーメーター | 意味 |
|----------- | ------------- |
| Duration | エミッターがパーティクルを生成する時間 |
| Looping | 繰り返し設定 |
| Prewarm | 事前に発生させておく（すでに燃えている松明など）|
| Start Delay | 開始の遅延秒（Prewarmオンのときは使えない）|
| Start Lifetime | パーティクルの寿命 |
| Start Speed | 開始時の速度。初速 |
| Start Size | 開始時の大きさ |
| Start Rotation | 開始時の角度 |
| Start Color | 開始時の色 |
| Gravity Modifier | 重力。マイナス値も設定できる |
| Inhrit Velocity | エミッターが移動した場合に継承すべき速度（次のSimulation Spaceと連動する） |
| Simulation Space | ローカル（エミッターに追従する）／ワールド（エミッターに追従しない）|
| Play on awark | エミッターを配置したら自動的に開始する |
| Max Particles | パーティクルの最大生成数 |

**Start Color の見方**
上が色、その下の白いとこがアルファ値
![start-color.png](https://qiita-image-store.s3.amazonaws.com/0/20773/4001c9d0-44cb-6007-1460-47775994c7e5.png "start-color.png")

数値フィールドの右側にある小さな ▼ はリストになっていて値の幅を選べる
![random.png](https://qiita-image-store.s3.amazonaws.com/0/20773/c7e07997-7247-b625-0e4e-169e348b2466.png "random.png")
次の4つが選べる

* Constant: 変化しない
* Curve: グラフエディタでカーブがかける
* Random between constants: 2つの定数間のランダム値
* Random between curves: 2つのカーブの間のランダム値

**Curve**
![curve-editor.png](https://qiita-image-store.s3.amazonaws.com/0/20773/8b11c611-fc6f-7b82-4297-71d2bb9967b0.png "curve-editor.png")
線上を右クリックで add key できる

以上が基本項目。
その他にさらに細かく設定できるモジュールがある。

モジュール
--------------------

* **Emission**
  * Rate: 時間ごとに生成する量（Max Particlesに関係する）
  * Bursts: パーティクル発生時の爆発（？）を追加  
  右の(+)で追加。間隔と量を指定する感じ

* **Shape**
  エミッターの形状を定義する。形によって設定できる値が変わる。
  Mesh はゲーム内のメッシュを選択することもできる。

* **Velocity Over Lifetime**
  パーティクルの速度を変化させる。

* **Force Over Lifetime**
  経過時間ごとに力を足していく

* **Color Over Lifetime**
  色を変化させる。Photoshopなどのグラデーションツールのような感じでアルファと色のポイントを複数設定できる。
  ![color-overtime.png](https://qiita-image-store.s3.amazonaws.com/0/20773/1d30772a-a45d-4d1d-a845-295cc254b76d.png "color-overtime.png")
  _presets で色セットを保存できる_

* **Size Over Lifetime**
  経過時間で変化する大きさをコントロールする
  ![size-overtime.png](https://qiita-image-store.s3.amazonaws.com/0/20773/f207c98d-12c9-a779-6724-ab0a0c9c54f7.png "size-overtime.png")
  _最大値は変えられる_

* **Rotation Over Lifetime**
  経過時間で変化する角度をコントロールする

* **Collision**
  未調査。あとで使う予定なので後ほど補完

* **Sub Emitter**
  エミッターの子供をつくれる

* **Texture Sheet Animation**
  マテリアルのテクスチャをつかってコマアニメをする。
  またコマアニメせずにコマをランダムに貼ることも可能。
  （個人的にこの発見は大きい。

External Forces、Color By Speed、Rotation By Speed、Rendererモジュールについては今回は未調査。