- Home /
How to Let an Animation Finish Before Playing Another?
Right now I have a gun script, but I have 2 errors: 1. I have a counter on the amount of ammo, and you're supposed to be able to shoot two shots, and then the gun automatically reloads, but it doesn't let the second shooting anim finish, it just goes right into the reload anim. 2: Right now, the gun can shoot as many rays, and as fast as you want, but I want it to be more realistic and wait like half a second or 1 second before you're able to shoot again (also you shouldn't be able to shoot while you're reloading)
Sorry about this being such a long question, but any help would be fantastic.
Thanks
#pragma strict
var sound1: AudioClip;
private var AmmoInGun : int = 2;
var Effect : Transform;
var TheDammage = 100;
var Distance = 50;
var Gun : Transform;
function Update ()
{
var hit : RaycastHit;
var ray : Ray = Camera.main.ScreenPointToRay(Vector3(Screen.width * 0.5, Screen.height * 0.5, 0));
if(Input.GetMouseButtonDown(0))
{
if (Physics.Raycast(ray, hit, Distance))
{
Shoot();
var particleClone = Instantiate(Effect, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(particleClone.gameObject, 2);
hit.transform.SendMessage("ApplyDammage", TheDammage, SendMessageOptions.DontRequireReceiver);
}
}
if(AmmoInGun == 0)
{
Shoot();
Reload();
}
if (Input.GetKeyDown(KeyCode.R))
{
Reload();
}
if (Gun.animation.isPlaying == false)
{
Gun.animation.CrossFade("Idle");
}
}
function Shoot()
{
audio.Play();
Gun.animation.CrossFade("Shoot");
AmmoInGun -=1;
}
function Reload()
{
Gun.animation.CrossFade("RELOAD");
AmmoInGun = 2;
}
Answer by MakinStuffLookGood · Jan 21, 2014 at 05:20 AM
if(AmmoInGun == 0)
{
Shoot();
Reload();
}
You call Reload(), which tells the animation to crossfade to the RELOAD animation, immediately after you call Shoot(). You could use Animation Events and have some call back that checks if you need to reload after the shoot animation. Or you could use a coroutine that waits the length of the shoot animation clip and then calls reload.
As for the second part of your question, again animation callbacks or coroutines could achieve the desired behaviour.
Great, thanks this is exactly what I was looking for :)
No problem, remember to accept the answer if it solved your issue!
Your answer
Follow this Question
Related Questions
Can I make animations snap to a frame? 1 Answer
Blender Animation Looping Delay Problem 2 Answers
Help ThirdPersonController Script 0 Answers
Animation Problem web player 0 Answers
Delay on animation 0 Answers