Simple timer using InvokeRepeating

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?

@pixel_fiend
Bro,Try this

In this it is using Coroutine but you can figure it out easily for InvokeRepeating

Note that InvokeRepeating is also independent of the GameObject’s Update() method, and will
continue to be invoked even if the object is disabled.

Your code look fine to me, youd want to run “CancelInvoke” in your “Tick” if Update is calling “Go” or any other function or loop that happens more than once… If Start or a function that is only ever really called once calls “Go” then you shouldnt have any problems at all initially.