- Home /
How do i destroy a character and have a particle effect after?
I have a enemy character that comes at me and once i kill him he falls and disappears. I created a particle effect that suppose to appear right after he disappears,as if he turns into dust. how would i go about doing this? I tried to create an empty game object and attach the particle system to it which didn't work. Then i tried to attach the particle system to enemy character and i still can't get it to work. Please Help!
Answer by Jaap Kreijkamp · Mar 15, 2010 at 05:45 AM
- make a gameobject
- add particle effect to it with auto-destruct on
- make a prefab of this gameobject
- optionally test if particle object does it's job (create new scene, place gameobject in view, press start, you should see the effect and object should clean up)
- modify your script to instantiate the effect:
var dieEffectsPrefab : Transform;
function Die() { Instantiate(dieEffectsPrefab, transform.position, transform.rotation); Destroy(gameObject); }
To respond to one of the comments, the Auto-destruct should destroy the gameobject the particle is a component of so it's not really necessary to add the delayed Destroy. If you do add the delayed Destroy, you should destroy the gameObject, not the transform you get back from the Instantiate. So code would become:
var dieEffectsPrefab : Transform; var timeOut : float = 3.0;
function Die() { var instance = Instantiate(dieEffectsPrefab, transform.position, transform.rotation); Destroy(instance.gameObject, timeOut); Destroy(gameObject); }
But once again, when you check the auto-destruct in the particle animator, you don't need this extra code.
I think the useful thing I found in addition to Jaap's response is using: var inst = Instantiate(dieEffectsPrefab...) Destroy(gameObject) Destroy(inst, 3)
That Destroy(inst, 3) would destroy the particle effect after 3 seconds so that it had its chance to blow up and then it'd disappear.
Answer by backalleyJack · Jun 01, 2012 at 07:19 AM
This works for me, using ParticleSystem. Code is attached to the object we are destroying:
public ParticleSystem DestructionEffect; //assign prefab in editor or elsewhere
//in code
void Explode()
{
//Instantiate our one-off particle system
ParticleSystem explosionEffect = Instantiate(DestructionEffect)
as ParticleSystem;
explosionEffect.transform.position = transform.position;
//play it
explosionEffect.loop = false;
explosionEffect.Play();
//destroy the particle system when its duration is up, right
//it would play a second time.
Destroy(explosionEffect.gameObject, explosionEffect.duration);
//destroy our game object
Destroy(gameObject);
}
Particle Systems normally destroy themselves, meaning that the timed destroy is normally not necessary.
You answer has turned up three times because it was held in a moderation queue, that happens when you have low $$anonymous$$arma and have just joined the site. Someone with enough $$anonymous$$arma will probably eventually delete the extra answers, but it would save them the effort If you did it :)
Done, sorry about that.
When I tested this, the particle always seemed to remain and replay after its duration ran out, even with loop = false. I didn't see any auto-destroy flag or anything like that in the API either. I'm curious, how do you get them to destroy themselves?
Answer by bienphong416 · Oct 19, 2015 at 10:45 AM
you ca'nt detroy other object in present script of other object , you must add a script into particle effect example:void start() { Detroy(gameobject,3); }
3 : the time detroy;