- Home /
Gun script help
I have a gun script but I can shoot as fast as I want and Make the animation and sounds skip. So I fire as fast as i can click the mouse. I tried putting this into my code yield new WaitForSeconds(5); but it says "Update() can not be a coroutine". here the code. (Its a JS) (ps. I'm so sorry, still can not code to look right) Any example/help would be nice. Thanks
var bullet: Rigidbody;
var speed = 50;
var AMMO = 5;
var c : AudioSource;
function Update(){
if(Input.GetButtonDown("Fire2")){
if(AMMO > 0){
animation.Play("shoot");
audio.Play();
var clonedBullet : Rigidbody = Instantiate(bullet,transform.position,transform.rotation);
clonedBullet.velocity = transform.TransformDirection(Vector3(0,0,speed));
AMMO--;
yield new WaitForSeconds(5);
}else{
c.audio.Play();
animation.Play("reload");
AMMO = 5;
yield new WaitForSeconds(5);
}
}
}
Answer by fafase · Jun 29, 2012 at 07:51 AM
You cannot call yield new WaitForSeconds(5); in the Update you need to create a coroutine/function outside of it that is called inside the Update.
I guess your point is to wait for 5 sec before being able to shoot again. You might want to use a timer instead. yield new WaitForSeconds(5); is only going to delay each call, so at first , it will wait 5 sec but then you will have all of your calls coming up.
var timer:float;
function Update(){
timer += Time.deltaTime;
if(Input.GetButtonDown("Fire2")){
if(timer>5){
if(AMMO > 0){
animation.Play("shoot");
audio.Play();
var clonedBullet : Rigidbody =Instantiate(bullet,transform.position,transform.rotation);
clonedBullet.velocity = transform.TransformDirection(Vector3(0,0,speed));
AMMO--;
timer = 0;
}else{
c.audio.Play();
animation.Play("reload");
AMMO = 5;
timer=0
}
}
}
}
That could fix your issue.
Your answer
Follow this Question
Related Questions
Animation plays at original position? 1 Answer
dynamic_bitset.test bit out of bounds 0 Answers
Finish One Combo 1 Answer
Animation.Time help 1 Answer
Make the animation play at the start of the time waited, not the end of it? 1 Answer