using UnityEngine; namespace MoreMountains.Tools { /// /// Add this class to a ParticleSystem so it auto destroys once it has stopped emitting. /// Make sure your ParticleSystem isn't looping, otherwise this script will be useless /// [AddComponentMenu("More Mountains/Tools/Particles/MM Auto Destroy Particle System")] public class MMAutoDestroyParticleSystem : MonoBehaviour { /// True if the ParticleSystem should also destroy its parent public bool DestroyParent; /// If for some reason your particles don't get destroyed automatically at the end of the emission, you can force a destroy after a delay. Leave it at zero otherwise. public float DestroyDelay; protected ParticleSystem _particleSystem; protected bool _started; protected float _startTime; /// /// Initialization, we get the ParticleSystem component /// protected virtual void Start() { _started = false; _particleSystem = GetComponent(); if (DestroyDelay != 0) _startTime = Time.time; } /// /// When the ParticleSystem stops playing, we destroy it. /// protected virtual void Update() { if (DestroyDelay != 0 && Time.time - _startTime > DestroyDelay) DestroyParticleSystem(); if (_particleSystem.isPlaying) { _started = true; return; } DestroyParticleSystem(); } /// /// Destroys the particle system. /// protected virtual void DestroyParticleSystem() { if (!_started) return; if (transform.parent != null) if (DestroyParent) Destroy(transform.parent.gameObject); Destroy(gameObject); } } }