- Home /
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);
}
}
}
Answer by syclamoth · Dec 19, 2011 at 11:16 PM
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)
Thanks,
I'm still a student learning and my instructor is not much help, he'd rather just do it for me or tell me something off subject.
Answer by Aleron · Dec 19, 2011 at 11:49 PM
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)
Your answer
![](https://koobas.hobune.stream/wayback/20220613062220im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Problem with Time.time 0 Answers
How to make a stopwatch that restarts every time the player dies and saves it as a highscore 3 Answers
How to create a UDK-like timer to call a function ? 1 Answer
Trying to get Timed button presses within a timed window 1 Answer
Timer Data Across Scene Changes 1 Answer