Bullet Script

Hello guys im making a bullet script but i got some errors.They say my gameObject (bullet) cant be coroutine.Heres my script

    var prefabBullet:Transform;
    var shootForce:float;
    var shots : int = 0;
    var maxShots : int = 8;
    var shootSound : AudioClip;
    function Update()
    {
    if(Input.GetButtonDown("Fire1") && shots < maxShots)
    {
    var instanceBullet = Instantiate(prefabBullet, transform.position, Quaternion.identity);
    instanceBullet.rigidbody.AddForce(transform.forward * shootForce);
    audio.PlayOneShot(shootSound);
    shots++;
    yield WaitForSeconds(2);
    Destroy (prefabBullet);
    }
    else if (shots >= maxShots && Input.GetKeyDown(KeyCode.R))
    {
    shots = 0;
    }
    }

Sorry my UnityScript is horrible. But the problem you are having is that you cannot use “Yield WaitForSeconds(2)” in an update function. You need to move it into a coroutine and call it separately.

Take a look over at a similar question I had, it might help:

But basically, you want to move your Yield statement into an IEnumerator and perform your wait logic there.

 var prefabBullet:Transform;
var shootForce:float;
var shots : int = 0;
var maxShots : int = 8;
var shootSound : AudioClip;
function Update()
{
if(Input.GetButtonDown("Fire1") && shots < maxShots)
{
var instanceBullet = Instantiate(prefabBullet, transform.position, Quaternion.identity);
instanceBullet.rigidbody.AddForce(transform.forward * shootForce);
audio.PlayOneShot(shootSound);
shots++;
//yield WaitForSeconds(2); -- REMOVE THIS MOVE TO IENUM CALL COROUTINE

StartCoroutine(Wait());

//Destroy (prefabBullet); -- REMOVE THIS MOVE TO COROUTINE
}
else if (shots >= maxShots && Input.GetKeyDown(KeyCode.R))
{
shots = 0;
}
}

IEnumerator wait() {

 return new Yield WaitForSeconds(2);
 Destroy(prefabBullet);
{

Mosins and Garands use clips, most modern day guns use magazines.