How to make loop with call to IEnumerator actually pause?

Hello all,

I am calling my function enterFlightMode which I am trying to make last ten seconds. 1 second per iteration. Heres the code.

	IEnumerator oneSec()
	{
		yield return new WaitForSeconds (1.0f);
	}

	void enterFlightMode()
	{
		Debug.Log ("Entered Flight mode");
		for (int i = 10; i > 0; i--) {
						flightText.guiText.text = "FLY! " + i;
						StartCoroutine( "oneSec" );
				}
		flightText.guiText.text = "";
		flightEnabled = false;
		jumping = true;
		Debug.Log ("Exited Flight mode");

	}

Essentially I want the two Debug.Log statements to execute 10 seconds apart; Each second changing my guiText.
I hope this is enough information let me know if you guys need more.

Thanks in advanced
P2

PS. I have tried a simple function call without StartCoroutine, but im not too sure of the difference

I see this form of code frequently on this list. You need to explore more about how a coroutine works. To make your code work you would have to make ‘enterFlightMode’ an IEnumerator, launch it with StartCoroutine() and move your yield statement into ‘enterFlightMode’.

When executing code in a coroutine, when a yield is encountered, control returns immediately to the calling code. So, while each ‘oneSec’ waits the 1.0 second before completing, it does not cause 'enterFlightMode() to pause.

Along the lines of what I think robertbu is talking about, I think you want something more like this:

private IEnumerator enterFlightMode() {
	Debug.Log ("Entered Flight mode");

	for (int i = 10; i > 0; i--) {
		flightText.guiText.text = "FLY! " + i;
		yield return new WaitForSeconds (1.0f);
	}

	flightText.guiText.text = "";
	flightEnabled = false;
	jumping = true;

	Debug.Log ("Exited Flight mode");
}

if you don’t need to actually do something every second, the for loop can come out and you would yield for 10 rather than 1