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);
}
}
}
@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);
}
}
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) !!
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
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