From 78f7b8192a14892c1b78dd990359781754974bb3 Mon Sep 17 00:00:00 2001 From: Andy Date: Thu, 10 Jul 2014 14:44:03 -0700 Subject: [PATCH] Catch Exceptions tossed by GameObject.transform after parts have been removed by Unity. --- PersistentEmitterManager.cs | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/PersistentEmitterManager.cs b/PersistentEmitterManager.cs index d822824..e82d6af 100644 --- a/PersistentEmitterManager.cs +++ b/PersistentEmitterManager.cs @@ -66,19 +66,32 @@ public void FixedUpdate() // If the gameObject is null ( when ? I forgot ... ) // or the tranform parent is null ( Emitter detached from part so the particle are not removed instantly ) // then the emitter won't be updated by the effect FixedUpdate Call. So update it here - if (persistentEmittersCopy[i].go == null - || persistentEmittersCopy[i].go.transform == null - || persistentEmittersCopy[i].go.transform.parent == null) + if (persistentEmittersCopy[i].go == null) { - persistentEmittersCopy[i].EmitterOnUpdate(Vector3.zero); - - if (persistentEmittersCopy[i].pe.pe.particles.Count() == 0) + Transform pecTransform = null; + + try + { + pecTransform = persistentEmittersCopy[i].go.transform; + } + catch (NullReferenceException) { - EffectBehaviour.RemoveParticleEmitter(persistentEmittersCopy[i].pe); - persistentEmitters.Remove(persistentEmittersCopy[i]); - if (persistentEmittersCopy[i].go != null) + // Destroy the gameobject so avoid exception handling in the future? + continue; + } + + if (persistentEmittersCopy[i].go.transform.parent == null) + { + persistentEmittersCopy[i].EmitterOnUpdate(Vector3.zero); + + if (persistentEmittersCopy[i].pe.pe.particles.Count() == 0) { - Destroy(persistentEmittersCopy[i].go); + EffectBehaviour.RemoveParticleEmitter(persistentEmittersCopy[i].pe); + persistentEmitters.Remove(persistentEmittersCopy[i]); + if (persistentEmittersCopy[i].go != null) + { + Destroy(persistentEmittersCopy[i].go); + } } } }