- 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