- Home /
C# Gameobject Is Destroyed before Animation Plays
I have a gameobject with an animator attached to it and it's parented to another gameobject scripted with my death script below. The animation is suppose to play first once health is less then zero. But I never see the animation play once and the script moves on to destroying the gameobject. Why is the script not playing the animation?
public float health;
public Animator explosion;
// Update is called once per frame
void Update () {
if(health <= 0){
explosion.Play("Explosions_");
if(!explosion.GetCurrentAnimatorStateInfo(0).IsName("Explosions_Animation")){
Destroy(gameObject);
}
}
}
Destroy(gameObject, time for destroy) time in destroy allow the animation play properly
Example: Destroy(gameObject, 0.5f);
will destroy the gameobject in half second.
Answer by Abhiroop-Tandon · Mar 24, 2016 at 03:57 PM
You need to use a coroutine in your particular case. Just look how long the animation plays for and then in the coroutine destroy the object after that particular second. I guess whats happening is the animation is being played and it goes to the destroy line and destroys the object. Try using a coroutine (They are pretty cool) !!
Answer by Link0n3 · Mar 25, 2016 at 06:28 AM
@DangerousBeans, you can attach the animation to the script and then call the Destroy as on the following. I am assuming an explosion animation only play once.
public float health;
public Animator explosion;
public AnimationClip explosionclip;
void Update () {
If(health <= 0){
explosion.Play("Explosions_");
Destroy(gameObject, explosionclip.length);
}
}
Answer by phil_me_up · Mar 24, 2016 at 04:13 PM
You could look at using Animation events. Once the animation has completed, this will call a routine which, amongst other things, could destroy the object. This way you know that the Destroy will be called at the exact end of the animation and it's easily portable across objects.
http://docs.unity3d.com/Manual/animeditor-AnimationEvents.html
Answer by SaurabhStudio · Mar 25, 2016 at 08:30 AM
you should give time to play animation clip before destroy. for example
Destroy(gameObject, TimeToPlayAnimation);
TimeToPlayAnimation is time taken by animation. For example if it takes 1s to play then TimeToPlayAnimation = 1.0f
Your answer
Follow this Question
Related Questions
using Contains(gameObject) to find and destroy a gameObject from a list 2 Answers
Destroy a Gameobject with a UI Button 3 Answers
The name "Destory" Does not exist in the current context 2 Answers
Animation issue (OnTriggerEnter) ***SOLVED*** 1 Answer
2D C# destroy a GameObject on collision 2 Answers