- Home /
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
Answer by robertbu · Apr 17, 2014 at 12:43 AM
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.
Answer by jonSG · Apr 17, 2014 at 12:52 AM
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
Your answer
Follow this Question
Related Questions
Can't get past WaitForSeconds in my coroutine 1 Answer
Coroutine doesn't work when called from another method. 3 Answers
Delay after input? 1 Answer
How to stop coroutines, when paused 2 Answers
OnCollisionEnter as IEnumerator problem (WaitForSecond) 2 Answers