When reloading my gun sounds and the bullets glitch out.

Okay so I have a gun it can aim and shoot,
Its automatic (so it shoos when holding down mouse 0 not clicking.)
I have a Empty Game Object for the bullet spawn.
When i shoot the first mag is fine (30 bullets per mag.)

But the next mag the sound is messed up some bullets are invisible and sometimes it shoots way more than 30 bullets.

Here is a link to a youtube vid of it:

I have 3 scripts:
Gun (the main one)
GunAnimation (For fire/Reloading animation’s)
Aim (for aiming)

Here are the scripts

Gun:

var Bullet : Rigidbody;
var Spawn : Transform;
var BulletSpeed : float = 1000;
var ReloadTime : float = 2;
var AmmoInMag : float = 30;
var IsFullAuto = true;
static var AmmoLeft : float;
static var ReloadTTime : float;
private var CanFire = true;
var FireRate = 0.1;
static var IsReloading = false;


function Start () {
	AmmoLeft = AmmoInMag;
	ReloadTTime = ReloadTime;
}

function Update () {
	if(IsFullAuto == false) {
		if(Input.GetButtonDown("Fire1")){
			if(AmmoLeft > 0) {
				BroadcastMessage("FireAnim");
				Fire();
			}
		}
	}
	else{
		if(Input.GetButton("Fire1")){
			if(AmmoLeft > 0) {
				BroadcastMessage("FireAnim");
				Fire();
				}
			}
		}
		
		if(AmmoLeft == 0)
		{
			Reload();
		}
		
		if(AmmoLeft < 0){
			AmmoLeft = 0;
		}
	}
function Fire () {
	if(CanFire == true && IsReloading == false){		
		var bullet1 : Rigidbody = Instantiate(Bullet,Spawn.position,Spawn.rotation);
		bullet1.AddForce(transform.forward*BulletSpeed);
		CanFire = false;
		yield WaitForSeconds(FireRate);
		CanFire = true;
		AmmoLeft -= 1;
		audio.Play();
	}		
}

function Reload () {
	CanFire = false;
	IsReloading = true;
	BroadcastMessage("ReloadAnim");
	yield WaitForSeconds(ReloadTime);
	IsReloading = false;
	CanFire = true;
	AmmoLeft = AmmoInMag;


}

GunAnimation:

var Fire : String;
var Reload : String;

function Start () {

}

function FireAnim () {
	gameObject.animation.Play(Fire);

}


function ReloadAnim () {
	gameObject.animation[Reload].speed = (gameObject.animation[Reload].clip.length / Gun.ReloadTTime);
	gameObject.animation.Play(Reload);

}

Aim:

var HipPose : Vector3;
var AimPose : Vector3;
private var MainCam : GameObject;
private var WeapCam : GameObject;


function Start () {
	transform.localPosition = HipPose;
	MainCam = GameObject.FindGameObjectWithTag("MainCamera");
	WeapCam = GameObject.FindGameObjectWithTag("WeaponCamera");

}

function Update () {
	if(Input.GetButton("Fire2")){
		transform.localPosition = AimPose;
		MainCam.camera.fieldOfView = 50;
		WeapCam.camera.fieldOfView = 50;
	}
	
	if(!Input.GetButton("Fire2")){
		transform.localPosition = HipPose;
		MainCam.camera.fieldOfView = 60;
		WeapCam.camera.fieldOfView = 60;
	}

}

Just glancing over it, it looks like:

yield WaitForSeconds(FireRate);

inside your fire function could be giving you some trouble! It doesnt count down ammo before after the fire rate. But I would try putting the delay somewhere else, so that you can’t shoot another bullet until the firerate is done.

@Vonni Thanks as I’m a complete noob at unity how do i do that?

Thanks ill look take a look tomorrow.