Unityのパーティクルその1
最近はめっきりUnityばっかりです。
ゲームを作る上で、パーティクルは非常に重要な要素だと思うのですが、それの各種設定について。
たぶん、何回かやると思います。
今回は、何かアクションした時に一瞬だけ出てくる文字とかを、Quadとかは使わずにパーティクルで表現しようとした場合、的なのをためしてみます。
今現在ラブライブ風のゲームが作れるかどうか試してみてるのですが、最終着地としては下記のMissやGreatといったやつのようなところで使っているやつを今回作ります。
実装
まずはパーティクルを生成します。
すると、デフォルト設定のパーティクルが生成されます。
真っ白いほわほわでは無く、自前の画像を使うようにしてみます。
インスペクターのRendererのところから変えれます。
すると、こんな感じで切り替えられます。
(※このGreatってやつは自分で用意したものです。)
このままだといっぱい出てきて困るので、
(1個だけ出てほしいので)
インスペクターのEmissionのところを下記のようにします。
TimeのRateを0にすることで、1秒間当たりに生成されるパーティクルの個数を0個にします。
そして、BurstsのTimeを0、Particlesを1にすることで、パーティクルシステムが生成されてから0秒後に1個のパーティクルを生成させます。
1個だけしか出ないようになりました。
しかし出てくる場所がばらばらです。
インスペクターのShapeをデフォルトのConeからMeshにすることで、一定方向への発射に切り替えます。
今のままだと、生成されてから上に動いていってしまうので、speedを0にします。
ついでにLifetimeとDurationも良い感じにします。(ここでは1.5にしています。)
このままだと出て消えるだけの単調なパーティクルになってしまうので、経過時間で透過度合いを変えようと思います。
インスペクターのColor over Lifetimeをいじって、
- Location:0でalpha:120
- Location:20%でalpha:255
- Location:100%でalpha:0
とします。
ここまでの設定を全部適用すると下記のような感じになるかと思います。
あとは、Loopingのチェックボックスを外して1回しか再生されないようにしたら、ゲーム中の良きタイミングでInstantiateしてあげれば良い感じに動くかと思います。
ただ、Durationが経過しきってもGameObjectとしては消滅しないので、実際にInstantiateとかする場合はスクリプトでちゃんとDestroyしてあげた方が良いです。
(自分は、Start()の中でDestroy(gameObject, 2.0f)
とかしてます。)