- 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