turret firing delay timer?

I am atempting to create a timer so that I can put a delay on my turrets fireing. Here is my code, it works as long as I dont try to put the timer in.

var nearestEnemy :GameObject ;
var enemies : GameObject[];
var distance : float;
var radius : float = 15.0f;
var speed = 20;
var projectile : Rigidbody;
var fireTime : int = 0;
var timer : float = Time.deltaTime * 1;
var tower : GameObject;
function Update()
{
  enemies = GameObject.FindObjectsWithTag("enemy");
  var nearestDistance : float = 9999999.9f;
   for(var enemy : GameObject in enemies)
   {
      distance = (transform.position - enemy.transform.position).sqrMagnitude;
      if(distance < nearestDistance;)
      {
          nearestDistance = distance;
          nearestEnemy = enemy;
      }
   }
   if(nearestDistance <= radius)
   {
      transform.LookAt(nearestEnemy.transform.position);
      if(timer == fireTime)
      {
         var instantiatedProj = Instantiate(projectile, tower.transform.position, tower.transform.rotation);
         Debug.Log(tower.transform.position + " " + instantiatedProj.transform.position);
         instantiatedProj.velocity =	transform.TransformDirection(Vector3( 0, 0, speed));
         Physics.IgnoreCollision(instantiatedProj.collider, transform.root.collider);
         fireTime = (fireTime + 5);
      }
   }
}

You can’t define a class variable in a dynamic way like

var timer : float = Time.deltaTime * 1;

If anything, this will evaluate once on the first frame and never update again (if it even compiles).

What you should be doing instead, is using

private var timer : float = 0;

then in Update-

timer += Time.deltaTime;

And then before you would shoot

if(timer >= fireTime)
{
    // Shoot a bullet!
    timer -= fireTime;
}

Then, make sure fireTime is set up in the inspector as the number of seconds between shots. (also make fireTime a float)

syclamoth’s answer should take care of your issue. You could also look at moving your shooting code into a separate method and then use MonoBehaviour.Invoke() (or possibly InvokeRepeating depending on your needs) to invoke it 5 seconds later (then set some kind of flag to designate that the turret is trying to fire so it doesn’t keep firing over and over)