Machine gun script shoots all bullets at once

Hello. I have created this gun script which is supposed to fire off one round, wait for the rateOfFire time to pass and then fire another bullet but instead all bullets are created at once. Here is my script

var prefabBullet:Transform;
var shootForce:float;
var shots : int = 0;
var isAutomatic = true;
var rateOfFire  : int = 2;
var maxShots : int = 100;
var maxClips : int = 2;
var reloadTime : int = 3;
var shootSound : AudioClip;
var reloadSound : AudioClip;

var isShooting = 1;
var lowerThanShooting = .5;

function Update()
{
    if(Input.GetButton("Fire1") && shots < maxShots && isShooting > lowerThanShooting)
    {
        var instanceBullet = Instantiate(prefabBullet, transform.position, Quaternion.identity);
        instanceBullet.rigidbody.AddForce(transform.forward * shootForce);
        audio.PlayOneShot(shootSound);
        animation.CrossFade("M60Fire");
        shots++;
        isShooting++;
        Auto();
        
    }
    else if (shots >= maxShots && Input.GetKeyDown(KeyCode.R))
    {
        
      Reload();  
        
    }
}

function Reload()
{        
        animation.CrossFade("M60Reload");
        yield WaitForSeconds (reloadTime);
        shots = 0;
        maxClips--;
}

function Auto()
{
   yield WaitForSeconds (rateOfFire);
   isShooting--;
}             

What is wrong with my script?

if(Input.GetButton(“Fire1”) && shots < maxShots && isShooting > lowerThanShooting)
{

This code, as long as player presses button and other conditions are met he can shot the gun. In your Auto, script you play the animation, but even if you have WaitForSeconds the function Auto is still being called every update. Along the if statement you should include the allotted time it takes to shot each bullet and when the time passes, enter into the statement and fire bullet

I just answered this question a few minutes ago:

http://answers.unity3d.com/questions/488579/adding-a-wait-command-in-my-inputgetaxis.html

Your issue is exactly the same. Coroutines don’t work the way you are expecting. Your code execute Auto() and then Auto() returns when it hits the ‘yield’. There are several approaches to get what you want here. The typical way for code I seen posted is to use a timer in Update(). You would declare a timer float variable at the top of the file and do this in Update:

timer += Time.deltaTime;

if(Input.GetButton("Fire1") && shots < maxShots && timer > rateOfFire) {
  timer = 0.0;
  // Your shooting code goes here

}