車から排出煙エフェクトを出せるようにする

## はじめに 
Unity公式エフェクト作成のチュートリアルを見て作ったは良いものの、使用していたテクスチャが古いテクスチャで存在しなかったり、機能の使い方がわかりずらかったので少しだけ詳しく書きます。

# 使用した環境
macbook pro 2018
Unity バージョン 2021.3.4f1

# 調べた情報について
Unity公式エフェクト作成からの改変なので、詳しい説明は以下の参考元をご覧ください

パーティクルシステム
「Particle System (パーティクルシステム) コンポーネントはシーン内で大量の小さな 2D の画像を生成し、アニメーション化することによって、液体、雲、炎などの流体をシミュレーションします。」

* Unity. 「パーティクルシステムより引用」 [https://docs.unity3d.com/ja/current/Manual/class-ParticleSystem.html](https://docs.unity3d.com/ja/current/Manual/class-ParticleSystem.html)

Particle System モジュール
今回重要になる部分です。これさえあればスクリプトなしでも動かせる優れものです。
「Particle System コンポーネントには各種の強力なプロパティがあります。これらは、簡単に使用できるように複数のモジュールにまとめられています。」
* Unity. 「Particle System モジュール」より引用[https://docs.unity3d.com/ja/current/Manual/ParticleSystemModules.html](https://docs.unity3d.com/ja/current/Manual/ParticleSystemModules.html)
> Unity.「車両からの排気煙の作成」 [https://docs.unity3d.com/ja/2019.4/Manual/PartSysExhaust.html](https://docs.unity3d.com/ja/2019.4/Manual/PartSysExhaust.html)
:::note alert
Standard Asset2018はUnityアセットストアから削除されています。
元の記事の通りには作れないので注意が必要です。
:::
今回はMaterialのShaderにあるparticlels/standard surfaceを使って代用品作るので上のアセットは不要です。



# 達成目標
Particle Systemのインスペクター内にあるCollsionを使って地面に当たった煙を跳ねさせたり、Size overを使って排気口から出た時は小さくその後に煙を大きく出来るようにする。
![movie_004.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/75f035d4-565c-17fa-8493-a5018afc88df.gif)

# 手順 
## 最初に
Particle Systemのhierarchyに作成します。
![スクリーンショット 2024-02-02 115245.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/e40cd98e-b0b6-f1da-7eb1-c05039f57315.png)
## 1 煙に使うmaterialの作成
![スクリーンショット 2024-02-02 090416.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/de745394-0922-d202-08bf-1408b0ad9a8d.png)
まずMaterialを作成し、MaterialのShaderにあるparticlels/standard surfaceを選びます。
そして、Albedoで色を変更します。今回であれば古めのトラックなので灰色に。
## 2 Shapeモジュール
次はParticle Systemのインスペクターの設定になります。
![スクリーンショット 2024-02-02 090815.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/22f17d00-e3f2-0900-8fea-dc8368fadeb1.png)

変更する場所
* Angle 0 これにすると1か所からエフェクトが一直線に放出されます
## 3 Rendererモジュール
![スクリーンショット 2024-02-02 091102.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/83dae4b5-0215-f707-16e1-d0e3e2d757fd.png)
1で作ったMaterialをRenderモジュールにあるMaterialへ設定します。
## 4 メインモジュールの設定
![スクリーンショット 2024-02-02 090019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/da1e8b75-bcac-1983-5d12-b532c4cb1329.png)
* Start Speed を以下の画像のようにします。
Paticel Syestem CurvesはHierarchyの下に隠れているのでクリックして開きます。
キー(丸)にカーソルを置いたままドラックすることで動かすことができます。
![スクリーンショット 2024-02-02 100414.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/5691e5ac-f974-5361-d73e-06ce74a21d47.png)
カーブ(線)を選択した状態で右クリックをすると、Addkeyが出てくるのでそれをクリックするとカーブを動かせるキーを追加できます。
![スクリーンショット 2024-02-02 100627.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/4c6b7778-2eff-1eb9-4652-1120eb7c4a8f.png)

それ以外に変更する場所
* Duration 30 システムが実行する時間の長さ
* Start Lifetime 2 パーティクルが出てからいつ消えるかの時間
* Gravity Modier 0 パーティクルに掛かる重力 今回はForce overで重力を作るので0に
* Scaling Mode Hierachy  パーティクルの速度基準
* Max Paticles 90 パーティクルの最大値

## 5 Velocity over Lifetimeモジュール
![スクリーンショット 2024-02-02 090931.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/1a8d052e-2537-e33f-3d43-9705057923f3.png)
変更する場所
* Speed Modifier 0.1 これにすると煙の速度を時間経過で徐々に落とすことができます
## 6 Force over Lifetmeモジュール
![スクリーンショット 2024-02-02 091340.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/e7a0c041-50ed-b21d-f3e1-f8f29c260b1b.png)
変更する場所
右側にある逆三角を押してCurveを選択
![スクリーンショット 2024-02-02 103907.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/6481a3f1-775b-cdd3-8ef7-5ceee19af7b2.png)
後は下の画像のように設定
ここでは煙の流れを決めます、今回は排出口が横にあるので横方向に流れる形で行きます。
![スクリーンショット 2024-02-02 104427.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/8af4b776-8421-c735-3bec-8c9693d6ee70.png)
![スクリーンショット 2024-02-02 103448.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/c661259d-dec6-e213-918f-85740f052bdf.png)
![スクリーンショット 2024-02-02 103505.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/eb9a1906-fb0c-51d4-cdcf-a6ce951a1361.png)
X.Y.Zの下にあるハイライトされた数値を押すと上限を決められます。
## 7 Size over Lifetimeモジュール
![スクリーンショット 2024-02-02 091233.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/44af9a95-6da1-6772-a6e4-8e67ecfb2adf.png)
ここを変更すると煙のサイズを時間経過で変更出来るようになります。
排気口から出た後、モクモクとした煙として地面落ちて消滅する想定です。
![スクリーンショット 2024-02-02 105533.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/eecb6847-cb9f-9817-8d5c-3c8e7c193678.png)

## 8 Size by Speedモジュール
![スクリーンショット 2024-02-02 091304.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/c27c51d3-12fe-5b19-64dd-50c21a726064.png)
ここでは煙の移動でどんな大きさに変化させるかを決めます。
最初は小さく徐々に大きくしたいので、以下の画像のようにします。
![スクリーンショット 2024-02-02 110229.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/0eabd3b5-4c1d-4801-c15d-cf4871165e7a.png)
## 9 Collisonモジュール
![スクリーンショット 2024-02-02 111525.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/9c240090-3396-ed68-9b38-c8bf832ad25e.png)
ここでようやく跳ね返る機能の追加です。これが無いと地面の上をすり抜けてしまうので注意。
変更する場所
Type World 地面だけでなく他のオブジェクトに当たる場合はWorldへ地面だけであればPalnesに
Bounce 0.5 煙がオブジェクトに当たった際に、跳ね返る煙に加わる力
# 結果
完成
まだ完璧とは言えないもののある程度それらしくなった。
もう少し変えたいけどVFX Graphが魅力的すぎる...
![movie_004.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116324/7b5f02e6-56aa-16ba-5fab-0ac3d7c3c49c.gif)

# まとめ
Particle Systemのインスペクター内にあるCollsionやSize overLifetimeを使うと、地面に当たったときの動きを設定出来たり、パーティクルのサイズを時間経過で変更することができます。
# 参考
Unity車両からの排気煙の作成: [https://docs.unity3d.com/ja/2019.4/Manual/PartSysExhaust.html](https://docs.unity3d.com/ja/2019.4/Manual/PartSysExhaust.html)
Unityパーティクルシステム [https://docs.unity3d.com/ja/current/Manual/class-ParticleSystem.html](https://docs.unity3d.com/ja/current/Manual/class-ParticleSystem.html)
# 使用したアセット(トラック)
Unity Asset Store Gaz 66 [https://assetstore.unity.com/packages/3d/vehicles/land/gaz-66-91665](https://assetstore.unity.com/packages/3d/vehicles/land/gaz-66-91665)