この記事でのバージョン
Unity 2018.4.0f1
はじめに
今回はタイトル通り、パーティクルの再生が終わった時に何か処理をしたい場合の話です。
イメージとしては以下のような感じ。
ちなみにUnity 2018(.1?)からの機能ですのであしからず。
OnParticleSystemStopped
パーティクルの再生が終わった時に処理をしたい場合は
MonoBehaviourのOnParticleSystemStoppedを使います。
使い方は簡単、Particle SystemのStop ActionをCallbackにして、
MonoBehaviourを継承したクラスにOnParticleSystemStoppedを実装、
using UnityEngine; public class NewBehaviourScript : MonoBehaviour{ /// <summary> /// パーティクルの再生が終わった時に実行される /// </summary> private void OnParticleSystemStopped(){ Debug.Log("パーティクル終わったよ!"); } }
さらにそのクラスをParticle Systemと同じGameObjectにAddするだけ。
なお、当たり前ですが
Loopingを有効にしてると終了しないので、OnParticleSystemStoppedは実行されません。
ただし、ParticleSystemのStopを使って止めた場合はOnParticleSystemStoppedが実行されます。
(Loopingが無効の場合も同様)
using UnityEngine; public class NewBehaviourScript : MonoBehaviour{ private float _time = 0; private void Update() { if (_time >= 0.5f) { return; } _time += Time.deltaTime; //0.5秒過ぎたらパーティクルを止める if (_time >= 0.5f) { GetComponent<ParticleSystem>().Stop(); } } /// <summary> /// パーティクルの再生が終わった時に実行される /// </summary> private void OnParticleSystemStopped(){ Debug.Log("パーティクル終わったよ!"); } }
なお、Stopの瞬間にOnParticleSystemStoppedが実行されるのではなく、
Stopの時点で表示されているパーティクルの再生が終わったら実行されます。