- Home /
 
Particle System resets when unparenting
I have a particle system attached to an object. When I unparent the particle system in OnDestroy, all current particles disappear and then the system restarts. I noticed that if I have the particle system set to no play on awake then manually start it, it will stop playing altogether when I unparent it.
I simply want this particle system to persist when the parent is destroyed, then have the remaining particles disappear.
Here is the script I am using:
 using UnityEngine;
 using System.Collections;
 
 [RequireComponent(typeof(Enemy))]
 public class DamageParticleEffect : MonoBehaviour
 {
     #region Fields
     public ParticleSystem particlePrefab;
     public Vector3 spawnPosition;
     [Range(0f, 1f)]
     public float activateHealth = 0.25f;
     public string sortingLayer = "Effects";
     public int sortingOrder = 0;
 
     private Enemy thisEnemy;
     private ParticleSystem particleInstance;
     #endregion
 
     #region Internal Properties
     private bool CanActivate
     {
         get
         {
             return particleInstance == null && 
                    thisEnemy != null &&
                    thisEnemy.HealthPercentage <= activateHealth;
         }
     }
     #endregion
 
     #region MonoBehaviour
     private void Awake()
     {
         thisEnemy = GetComponent<Enemy>();
     }
 
     private void Update()
     {
         if (CanActivate)
         {
             SpawnParticles();
         }
     }
 
     private void OnDestroy()
     {
         if (particleInstance != null)
         {
             particleInstance.transform.parent = null;
             particleInstance.enableEmission = false;
             Destroy(particleInstance.gameObject, particleInstance.startLifetime);
         }
     }
 
     private void OnDrawGizmosSelected()
     {
         Gizmos.color = Color.blue;
         Gizmos.DrawSphere(transform.TransformPoint(spawnPosition), 0.1f);
     }
     #endregion
 
     #region Internal Helper Methods
     private void SpawnParticles()
     {
         particleInstance = Instantiate(particlePrefab) as ParticleSystem;
         particleInstance.transform.parent = transform;
         particleInstance.transform.localPosition = spawnPosition;
         particleInstance.renderer.sortingLayerName = sortingLayer;
         particleInstance.renderer.sortingOrder = sortingOrder;
         particleInstance.Play();
     }
     #endregion
 }
 
              Answer by lolzrofl · Mar 23, 2015 at 01:07 AM
I figured out a solution.
Using OnDisable instead of OnDestroy prevents the particle system from resetting itself! 
Answer by tfritzy · Sep 13, 2020 at 04:40 AM
What worked for me was putting the object under an empty parent, then un-parenting that.
Your answer
 
             Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Particle system play too late (c#) 1 Answer
Distribute terrain in zones 3 Answers
Unity "unequip" selected item from inventory. 1 Answer
Destroying Objects. 1 Answer