周回するParticle

# はじめに
本記事では、UnityのParticle Systemを使用して、エフェクトが円周上を回るアニメーションの作り方について解説します。また、初心者の開発者を対象に、基本的なパーティクル設定から、Particle Systemに内包されたモジュールについても解説します。


 ![Particle_sys.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551600/27d1af2a-8b4f-7996-e3df-2b1ab08f685d.gif)

### 環境
 ・Unity 2022.3.18f1



## Particle Systemの作成
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551600/aa4e9ecf-1306-6b6f-e294-04ef523234ea.png" width=50%>

UnityエディタのHierarchyビューで右クリックし、`Create > Effects > Particle System`を選択して新しいパーティクルシステムを追加します。

### Particle Systemの設定

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551600/40ad586b-e677-30f6-ae7a-0456db95d8bf.png" width=70%>

以上のように設定してください。


設定後、Inspector上にあるモジュール`Emission`、`Shape`、`Velocity over Lifetime`、`Renderer`にチェックが入っていることを確認してください。

以降、それぞれのパラメーターを設定してきます。

## Shapeの設定
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551600/ce1982f2-5295-99f5-8467-982c76f5a231.png" width=60%>

Shapeモジュールのパラメーターは以上のように設定してください。

### ちなみに
Particle SystemのShapeモジュールは、パーティクルがどのように空間内で放出されるかを定義します。

- **Shape Type**: 放出されるパーティクルの形状を決定します。円形、球形、コーン形など、多様な形状から選択できます。

- **Radius**: 形状が円や球である場合、このパラメーターは放出元の半径を定義します。半径が大きいほど、パーティクルはより広い範囲にわたって放出されます。

- **Angle**: コーン形状を選択した場合、このパラメーターはコーンの開口部の角度を定義します。角度が大きいほど、放出範囲が広がります。

- **Arc**: 形状が円の場合、このパラメーターは円周のどの部分からパーティクルを放出するかを定義します。360度で全周から放出され、より小さい値では一部分からのみ放出されます。

- **Scale**: Shapeモジュール全体のスケールを調整します。このパラメーターは、形状の大きさを直接的に変更し、結果として放出されるパーティクルの分布範囲を調整します。

- **Position, Rotation, Scale**: これらのパラメーターは、Shapeモジュールの位置、回転、およびスケールを細かく調整します。特定の形状や方向にパーティクルを放出したい場合に便利です。


## Velocity over Lifetimeの設定
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551600/b8c2eb07-98b1-4dc5-3fc4-80d8f38b4518.png" width=70%>

LinearをCurveに変更し、Curveを写真のように設定してください。

### ちなみに

Velocity over Lifetimeモジュールは、パーティクルの生存期間にわたって速度を制御するための強力なツールです。このモジュールを使用することで、パーティクルが生成されてから消滅するまでの間に、その速度を動的に変更することができます。

- **Space**: 速度の変更を適用する際の参照フレームを選択します。「Local」を選択すると、パーティクルのローカル空間内で速度が適用され、「World」を選択すると、ワールド空間で速度が適用されます。

- **x, y, z**: これらのパラメーターは、それぞれの軸に沿ったパーティクルの速度を定義します。値は固定された数値であることも、時間の経過に応じて変化する曲線であることもあります。これにより、パーティクルの動きに多様性を持たせることが可能になります。

- **Speed Modifier**: このパラメーターは、パーティクルの速度に対して全体的な倍率を適用します。生存期間全体で一定の速度変更を加えたい場合に便利です。この値も固定値であるか、時間の経過と共に変化する曲線であるかを選択できます。

Velocity over Lifetimeモジュールを適切に設定することで、パーティクルの動きをリアルタイムで細かく制御し、よりリアリスティックでダイナミックなエフェクトを作成することができます。例えば、パーティクルが上昇してから徐々に下降するような動きや、生存期間にわたって加速する動きなど、さまざまな表現が可能になります。

## Renderer
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551600/d0c8df47-b06f-833b-9227-903fdf665536.png" width=70%>

以上のように設定してください。
Materialは自作なりDefaltなりなんでも大丈夫です。

### ちなみに

Particle SystemのRendererモジュールは、パーティクルの表示方法を制御します。このモジュールを通じて、パーティクルの色、形状、サイズ、テクスチャなど、ビジュアルに関する多くの側面を調整できます。以下に、Rendererモジュールの主要なパラメーターを紹介します。

- **Render Mode**: パーティクルの描画モードを選択します。Billboard、Stretch Billboard、Horizontal Billboard、Vertical Billboard、Meshなど、パーティクルがカメラに対してどのように表示されるかを定義します。

- **Material**: パーティクルに適用されるマテリアルを設定します。このマテリアルを通じて、パーティクルの色やテクスチャを定義できます。

- **Sort Mode**: パーティクルがどのようにソートされるかを選択します。距離、年齢、カメラの距離など、さまざまな基準に基づいてパーティクルの描画順を制御します。

- **Sorting Fudge**: この値を使用して、パーティクルシステムのソートオーダーを微調整します。他の透明オブジェクトやパーティクルシステムとの描画順を調整する際に便利です。

- **Min Particle Size & Max Particle Size**: カメラに対するパーティクルの最小および最大サイズを制限します。これにより、パーティクルがあまりにも小さくなったり、大きくなりすぎたりするのを防ぎます。

- **Cast Shadow**: パーティクルが影を投げるかどうか、そしてどのようなタイプの影を投げるかを制御します。オプションには、Off、On、Two Sided、Shadows Onlyがあります。

- **Receive Shadows**: このオプションが有効の場合、パーティクルは他のオブジェクトからの影を受け取ります。

Rendererモジュールを適切に設定することで、パーティクルシステムのビジュアル品質を向上させ、ゲーム内での見た目をよりリッチで魅力的なものにすることができます。

## Emission
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551600/679a3202-b851-93a2-62d4-9c041170fdc1.png" width=70%>

以上のように設定してください。

### ちなみに
Particle SystemのEmissionモジュールは、パーティクルがどれだけの頻度で、どのようにして放出されるかを制御します。このモジュールを通じて、パーティクルの放出量や放出パターンを詳細に設定することができ、エフェクトの動的な挙動を大きく左右します。

- **Rate over Time**: 単位時間あたりに放出されるパーティクルの数を指定します。この値を調整することで、パーティクルの放出密度をコントロールできます。

- **Rate over Distance**: オブジェクトが移動する距離に応じて放出されるパーティクルの数を指定します。この設定は、移動するオブジェクトのトレイルエフェクトなどに有効です。

- **Bursts**: 特定の時間に一度に大量のパーティクルを放出するための設定です。各バーストは、放出するパーティクルの数、バーストが発生する時間、およびそのバーストの繰り返し回数を個別に設定できます。

    - **Count**: 一度のバーストで放出されるパーティクルの数を指定します。
    - **Time**: バーストが発生する時間を指定します。Duration内の任意の時点を設定できます。
    - **Repeat Count**: バーストが何回繰り返されるかを指定します。0に設定すると、バーストは1回のみ発生します。
    - **Repeat Interval**: 繰り返しの間隔を指定します。この時間が経過するごとに、バーストが再び発生します。

Emissionモジュールを適切に設定することで、パーティクルの放出パターンを細かく制御し、ゲーム内で様々なエフェクトを表現することができます。例えば、連続的な放出による流れるようなエフェクトや、バースト放出による爆発エフェクトなど、多彩なビジュアル表現が可能になります。

## まとめ

![2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551600/1327b589-a5bc-3ea3-7a3d-de6fcb434f51.gif)
以上のようなぐるぐる回るParticleが作成できたかと思います。
Rendererに設定するMaterial次第で、冒頭であげたキラキラしたエフェクトも作成可能なので、さまざまなパターンを試してみてください。