I have tried making a simple timer script that uses Invoke, and more recently, InvokeRepeating. It seems simple enough, but I’m having an issue where it will blast through the first 10 seconds, calling Tick() in rapid succession.
Here is my current code.
public class TimerBehavior : MonoBehaviour {
public delegate void TickDelegate(int secondsRemaining);
public TickDelegate OnTick;
public delegate void CompleteDelegate();
public CompleteDelegate OnComplete;
int secondsRemaining = 0;
public void Go(int seconds){
secondsRemaining = seconds;
InvokeRepeating("Tick", 0, 1f);
}
void Tick(){
if (OnTick != null) { OnTick (secondsRemaining); }
if (secondsRemaining > 0) {
secondsRemaining--;
}
if(secondsRemaining == 0){
if(OnComplete != null){ OnComplete(); }
Stop ();
}
}
public void Stop(){
CancelInvoke ("Tick");
}
}
For simplicity-sake, ignore the fact that there will be issues if Go() is called while the timer is already ticking.
Is there anything blatantly wrong with this code?