Unityゲームで「簡単なエフェクト」を実装してみます。今回は「ParticleSystem」を利用していきます。
はじめに
「Unity 2020.3.26f1」ヴァージョンで作成しています。
effectのParticleSystemを使って簡単にエフェクトを実装してみます。
実装開始
ヒエラルキーメニューで右クリック、「エフェクト」→「パーティクルシステム」を追加。

追加して直ぐの初期状態だと、粒子っぽいものが上に上がっていきますね。

シーンビューを確認、形状が円錐になっています。

試しに、開始時の色を「2つの色間でランダム」を選択し、白色と黒色にしてみます。白色と黒色の間のランダムな色で生成されます。

Transformをリセットすると中心から全体に広がるように粒子が発射されます。

雪っぽいエフェクトを作成
試しに雪っぽいエフェクトを作成してみます。
まずは開始時のサイズを適当な範囲になるように変更(ここでは0.5と1.5を指定)、開始時の色は白と少し灰色の「2つの色間でランダム」にしてみます。

上から降るようにするので、形状をエッジにして、Radiusを画面の横幅に合わせます。

上に粒子が上がっていくので、X軸で180度回転させて、位置を上に移動します。

このままでも良いですが、「落ちるスピードにバラツキ」と「少し揺らいでいる感」を出したいので開始時の速度、放出とノイズを設定して調整。

下記の様な感じになりますね。途中で消えているので継続時間を長めに変更した方が良さそう。

スクリプトで調整
降ってくる雪を止める場合、下記の様な感じのスクリプトに。「SnowStop()」を呼ぶと雪が止まります。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class EffectSample : MonoBehaviour { private ParticleSystem _particle; void Start() { _particle = GetComponent<ParticleSystem>(); } public void SnowStop() { _particle.Stop(); } }
降るスピードや降る量を時間経過やタイミングで調整する場合は、下記の様な感じで開始時間(startSpeed)や放出率(rateOverTime)を変更。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class EffectSample : MonoBehaviour { private ParticleSystem _particle; void Start() { _particle = GetComponent<ParticleSystem>(); } public void ChangeSnow() { var main = _particle.main; var em = _particle.emission; main.startSpeed = new ParticleSystem.MinMaxCurve(3.0f, 6.0f); em.rateOverTime = 40.0f; } }
テクスチャや他の項目を変更すると色々出来そう。