- 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
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