- Home /
 
Gun reload not working?
Hello all, this is my ammo script attached to the gun:
 var Bullet : Rigidbody; //The bullet prefab is a Rigid body
 var Spawn : Transform; //Where the bullet shoots from
 var BulletSpeed : float = 1000; //How fast the bullet goes
 var ReloadTime : float = 2; //How long it takes to reload
 var AmmoInMag : float = 30; //How much ammo the gun carries
 var IsFullAuto = true;
 static var AmmoLeft : float;
 private var CanFire = true;
 var FireRate = 0.1;
 
 function Start () {
     AmmoLeft = AmmoInMag;
     }
 
 function Update () {
 
     if(IsFullAuto == false){
         if(Input.GetButtonDown("Fire1")){
             if(AmmoLeft > 0){
                 Fire();
             }
         }
     }
     else{
     if(Input.GetButton("Fire1")){
             if(AmmoLeft > 0){
                 Fire();
             }
         }
     }
 
 
     
     if(AmmoLeft == 0)
     {
         Reload();
     }
     
     if(AmmoLeft < 0){
         AmmoLeft = 0;
     }
 }
 function Fire(){
     if(CanFire == true){
         var bullet1 : Rigidbody = Instantiate(Bullet,Spawn.position,Spawn.rotation);
         bullet1.AddForce(bullet1.transform.right *BulletSpeed);
         CanFire = false;
         yield WaitForSeconds(FireRate);
         CanFire = true;
         AmmoLeft -= 1;
         audio.Play();    
     }
 }
 
 
 
 function Reload(){
     CanFire = false;
     yield WaitForSeconds(ReloadTime);
     CanFire = true;
 }
 
               I can't figure out why, but all works until it has to reload - the gun will fire but when the AmmoInMag runs out, it doesn't seem to reload.. how can I fix this?
Help is appreciated + thanks in advance.
Answer by robertbu · Dec 07, 2013 at 07:31 AM
You're not putting any bullets back in the gun in your Reload() function. Between lines 59 and 60, add:
 AmmoLeft = AmmoInMag;
 
              This works, with no errors, but after the first reload, it fires more than 7 shots before reloading, why is this?
Side note - there are 7 bullets in the "AmmoIn$$anonymous$$ag" variable in the inspector.
The problem is here:
 if(AmmoLeft == 0)
     {
        Reload();
     }
 
                  This is executed every frame in Update() during the time your code is waiting for 'ReloadTime'. This means a bunch of extra coroutines stack up refilling 'AmmoLeft'. This should fix it:
 if(AmmoLeft == 0 && CanFire)
     {
        Reload();
     }
 
                 I recommend you to take a look at the concept of the state machines... It's not that complicated and very useful in game logic program$$anonymous$$g
Your answer
 
             Follow this Question
Related Questions
Switch Weapon Script Not taking effect HELP!! 2 Answers
How do I make an object move? 3 Answers
Reload help 1 Answer
Some issues with weapon switching and reloading? 2 Answers
Reload Mobile 0 Answers