- Home /
Making something happen only for one second during an Update function?
I am trying to write a code that shows an increasing wave counter. It should increase by 1 every 60 seconds and increase the number of spawned NPCs by 5 during that same interval.
Now I have this code here:
var wave_number = 0;
var wave_text : GUIText;
var wave_amount = 10;
var background_timer = 0;
function Start () {
}
function Update () {
background_timer = Time.time % 11;
if(background_timer == 10)
{
Invoke("New_Wave", 1);
}
}
function New_Wave () {
wave_number++;
wave_amount += 5;
Debug.Log("Wave number is " + wave_number.ToString() + ". " + "There are " + wave_amount.ToString() + " enemies.");
}
which at this point is just serving as a test (hence why the interval is currently 10 instead of sixty. However the first problem I'm seeing before I implement text is that in the debug log is that when the code runs, it runs the code for every frame that happened when the timer was equal to 10 (sometimes 55, sometimes 60+) leading to a huge wave number and enemy count of over 200.
So how would I make it so that it only does one increase during that second instead of a bunch according to the framerate?
I've tried it with and without invoke, and the result has been the same.
Answer by Griffo · Oct 28, 2012 at 06:57 AM
Try this.
var wave_number = 0;
var wave_text : GUIText;
var wave_amount = 10;
var background_timer = 0;
var wave : boolean;
function Start () {
}
function Update () {
background_timer = Time.time % 11;
if(background_timer == 10)
{
wave = true;
Invoke("New_Wave", 1);
}
}
function New_Wave () {
if(wave){
wave_number++;
wave_amount += 5;
Debug.Log("Wave number is " + wave_number.ToString() + ". " + "There are " + wave_amount.ToString() + " enemies.");
wave = false;
}
}
That was perfect! Though I do wonder why it works...
Glad it helped, it works only once while wave is true then sets wave to false, as during the 1 second that the timer is a 10 seconds for that second Update runs say 50 time per second so it will update your wave_number and wave_amount that many times during that second.
Please mark it as answered if you are satisfied, Thanks.
Your answer
Follow this Question
Related Questions
Rigidbody.AddForceAtPosition & functions 1 Answer
Im a bit confused on a simple script 1 Answer
Aiming with function "Update" not working 0 Answers
Update() doesnt call method or modify values 1 Answer
Update not being called 1 Answer