Why do all the bullets come out at once?

I wrote this script, and when I hold down the mouse to activate the full auto bool, all the bullets come out with no delay between them. How would I make it so that there is a delay between when the bullets are shot, CurrentAmmo is reduced by one, and the ShotSound is played? (Meaning that when these happen all at one, how would I make a delay before it repeats?)

while (isFullAuto == true) {
			if (CurrentAmmo <= 0.5)
				break; 
			RaycastHit hit; 
			if (Physics.Raycast (WeaponCamera.transform.position, WeaponCamera.transform.forward, out hit, range)) {
				Debug.Log (hit.transform.name); 

				health = hit.transform.GetComponent<EnemyHealth> (); 
				if (health != null) {
					health.TakeDamage (damage); 
				}

				if (hit.rigidbody != null) {
					hit.rigidbody.AddForce (-hit.normal * hitForce); 
				}

				GameObject impactGO = Instantiate (impactEffect, hit.point, Quaternion.LookRotation (hit.normal)); 
				Destroy (impactGO, 2f);
			}
			CurrentAmmo--; 
			shotSound.Play ();
		}

You should first create a variable that stores the delay you want, and one for the time left.

public float delay = 0.5f;
public float timeLeft = 0.5f;

And then, in your Update, decrease time left based on how much time has passed.

void Update {
    if (timeLeft > delay) {
        timeLeft -= Time.deltaTime;
    }
}

And in your script, take out lines 17-18 and 20-21 and put the below where your Instantiate was:

if (timeLeft > delay) {
    GameObject impactGO = Instantiate (impactEffect, hit.point, Quaternion.LookRotation (hit.normal));
    Destroy (impactGO, 2f);
    CurrentAmmo--;
    shotSound.Play ();
    timeLeft = delay;
}

Cheers!