今回はParticle System(Shuriken)の生成タイミングをTimelineで制御する方法についてです。
Particle Systemとタイミング制御
パーティクルのタイミングを制御する場合、多くのケースでは以下の3つのアプローチだったんじゃないかなと思います。
- パーティクルのStart Delayで生成タイミングを調整する
- GameObjectのアクティブを切り替えるスクリプトを記述する
- Emit等で呼び出すコードをスクリプトから記述する
- パーティクル生成のタイミングをAnimationEventやコルーチンで制御する
この面倒な所は、スクリプトからParticleを制御する場合にはゲームを再生しないと動作が確認出来ない点が問題になります。
またStart Delayの場合は基本的に、Particle以外の要素と含めた動作を確認するのがに面倒です。
まぁ、Start Delayは色々と面倒な所があるので、基本的には
といった調整になるかなと。
個人的には、Particleのタイミングは表現を気持ちよくする為の重要なファクターだと思っているので、この制御に特殊技能が必要になったり、何度も試すのが面倒になっていたりするのは非常に面倒な話です。
ほんの僅かにタイミングをズラシてみますが、結構印象が変わるものです。
ParticleのタイミングをTimelineから制御
微調整と制御が容易なTimelineにて、パーティクルのタイミングを制御してみます。
こちらのアプローチだと、パーティクルの生成タイミングが非常に簡単に出来るようになります。
勿論Timelineで制御する事が前提となりますので、イベントシーンや戦闘エフェクトシーン、ガチャ演出等に使えるかな?という感じです。
動作をゆっくり確認したり巻き戻したり、発生の時間をズラしたり、他のアニメーションとタイミングを合わせたり。
ControlPlayableでParticleを制御する
パーティクルの制御はControl Playableで制御できます。Control Playableにパーティクルをセットすれば、Clip開始地点からパーティクルの再生が始まります。
- Control Trackを追加し、
- Add Control Playable Asset Clipを追加、
- Source Game Objectにパーティクルを指定
幾つかの問題
ただこの方法、幾つかの問題が確認されています。
例えば以下の二つです。
- SubEmitterが動作しないバグがある
- RateOverDistanceが動作しない
SubEmitterは兎も角、RateOverDistanceは動いて欲しい所です。
また、バージョンアップで治りましたが初期バージョンではParticle側のマテリアル変更等が即座に反映されないといった動作も確認されました。
こちらはPreviewを二回押して(On/Offを切り替える)Timelineを再起動すれば解決します。
面倒な事にTrackではなくClipにアクションするParticleを設定する機能になっています。要するに動的なバインドが面倒くさいです。
下のようなアプローチを取るか、ParticlePlayableを制御するTrackを作成すれば回避可能ですが、うーん
その代わり1トラックに複数のParticleをセット出来るといえばメリットはありますが…
関連