読者です 読者をやめる 読者になる 読者になる

ことばアルバム

にわかエンジニアのにわか備忘録

Unityのパーティクルその1

最近はめっきりUnityばっかりです。
ゲームを作る上で、パーティクルは非常に重要な要素だと思うのですが、それの各種設定について。
たぶん、何回かやると思います。
 

今回は、何かアクションした時に一瞬だけ出てくる文字とかを、Quadとかは使わずにパーティクルで表現しようとした場合、的なのをためしてみます。
今現在ラブライブ風のゲームが作れるかどうか試してみてるのですが、最終着地としては下記のMissやGreatといったやつのようなところで使っているやつを今回作ります。

f:id:is4cafe:20140413004321g:plain


実装

まずはパーティクルを生成します。

f:id:is4cafe:20140413002156p:plain

 
すると、デフォルト設定のパーティクルが生成されます。

f:id:is4cafe:20140413002232p:plain

 

真っ白いほわほわでは無く、自前の画像を使うようにしてみます。
インスペクターのRendererのところから変えれます。

f:id:is4cafe:20140413002247p:plain

 

すると、こんな感じで切り替えられます。
(※このGreatってやつは自分で用意したものです。)

f:id:is4cafe:20140413002349p:plain

 
このままだといっぱい出てきて困るので、
(1個だけ出てほしいので)
インスペクターのEmissionのところを下記のようにします。
TimeのRateを0にすることで、1秒間当たりに生成されるパーティクルの個数を0個にします。
そして、BurstsのTimeを0、Particlesを1にすることで、パーティクルシステムが生成されてから0秒後に1個のパーティクルを生成させます。

f:id:is4cafe:20140413002510p:plain

 
1個だけしか出ないようになりました。
しかし出てくる場所がばらばらです。

f:id:is4cafe:20140413002826p:plain

 
インスペクターのShapeをデフォルトのConeからMeshにすることで、一定方向への発射に切り替えます。

f:id:is4cafe:20140413002912p:plain

 
今のままだと、生成されてから上に動いていってしまうので、speedを0にします。
ついでにLifetimeとDurationも良い感じにします。(ここでは1.5にしています。)

f:id:is4cafe:20140413003038p:plain

 
このままだと出て消えるだけの単調なパーティクルになってしまうので、経過時間で透過度合いを変えようと思います。
インスペクターのColor over Lifetimeをいじって、

  1. Location:0でalpha:120
  2. Location:20%でalpha:255
  3. Location:100%でalpha:0

とします。

f:id:is4cafe:20140413003236p:plain

 
ここまでの設定を全部適用すると下記のような感じになるかと思います。
あとは、Loopingのチェックボックスを外して1回しか再生されないようにしたら、ゲーム中の良きタイミングでInstantiateしてあげれば良い感じに動くかと思います。

f:id:is4cafe:20140413003517g:plain

 
ただ、Durationが経過しきってもGameObjectとしては消滅しないので、実際にInstantiateとかする場合はスクリプトでちゃんとDestroyしてあげた方が良いです。
(自分は、Start()の中でDestroy(gameObject, 2.0f)とかしてます。)