ゴマちゃんフロンティア

アザラシが大好きなエンジニアの開発日記です

【Unity】パーティクルシステムEmissionモジュールの「Rate over Distance」について

time 2017/06/17

というわけで、今回はUnityのパーティクルシステムに関するお話です!

Emissionモジュールの「Rate」が、いつの間にか (5.5から?) 「Time」と「Distance」に分かれていたりします。
今まで全く気にせず「Time」のみを使用していましたが、最近「Distance」の方を使う機会があったので、それに関する内容になります。

概要と使い道

とりあえず公式マニュアルを見てみましょう。
(日本語マニュアルは未だに5.4版なので載っていません)
https://docs.unity3d.com/Manual/PartSysEmissionModule.html

注目すべきはDetailsの「親オブジェクトの移動に応じて~」という部分です。その後に「オブジェクトの動きによってパーティクルをシミュレートする際に便利」的なことが書いてあります。Google翻訳なので正確ではありませんが、ニュアンスは合っているでしょう。
要するに「パーティクル自体のスピード(Start Speedとか)は0のままで、オブジェクト自体のTransformを動かすことで移動するような場合に使え」ということですね。

自分のゲームでは、「攻撃判定の生成」が正にそれです。ちょうど「攻撃判定に追従するような光のエフェクト」が欲しかったので、そのパーティクルのEmissionを「Time」から「Distance」に変えてみました。

攻撃判定はキャラクターの手のboneへ子オブジェクトとして生成しているため、手の動きに追従する状態です。(細かい部分は割愛します)

ちょっと攻撃モーションがアレなのでカクカクしていますが、概ねいい感じです!
もっとこだわりたい方は「Start Lifetime」や「Color Over Lifetime」等をいじると見栄えがよくなります。

ちなみに「Time」でRateを100にした場合は下のような感じ。

こちらでも追従はしますが、常に生成数が(時間毎に)一定なので、素早く移動させると途切れてしまうことがあります。
ただしこちらは止まっている場合でも生成されます。

「Rate over Distance」と「Max Particles」

「Rate over Distance」の値を上げると、移動距離に対するパーティクルの生成数が上がります。その性質上、少し上げただけでも実際の生成数が跳ね上がり、エフェクトが途切れてしまうことがあります。

その場合は基本モジュールの「Max Particles」の値を上げることで生成数の上限を増やしておきます。
デフォルトは1000なので、適度に上げて試してみてください。

当然ですがそれ相応に生成数が増えてしまうので、負荷には気を付ける必要があります。

あとがき

そんなわけで、パーティクルシステムの「Rate over Distance」に関するちょっとしたお話でした。
最近はステージ作りやシステムの微調整など、記事にしようがない作業ばかりなので、ブログ的な意味で困っていたりします。適度にネタを集めてつないでいきますので、今後ともよろしくお願いします!

down

コメントする