- Home /
Yield WaitForSec help in C sharp
I've checked out the documentation at Unity's site and I'm still not able to get it to work. Their examples all use the Start() function and I don't want to call the coroutine from the start function. In javascript I can place it a small pause anywhere I'd like but I'm just not having any luck with C sharp. Here's what I have:
public class MyClass : MonoBehaviour {
void Update()
{
DoSomething();
}
public void DoSomething()
{
print("BEFORE");
StartCoroutine(TakeABreak(5.0F));
print("AFTER");
}
IEnumerator TakeABreak(float seconds)
{
yield return new WaitForSeconds (seconds);
print("Good news everybody!");
}
}
My result is:
BEFORE AFTER ... 5 seconds pass ... Good news everybody!
However I'd like the 5 seconds pause to happen BETWEEN the BEFORE and AFTER. How can I do this?
Thanks!
Answer by Tetrad · Jul 08, 2010 at 01:57 AM
When you start a coroutine it'll go down into the coroutine function until it hits the first yield. After that, your coroutines will be "ticked" after LateUpdate. In the case of WaitForSeconds, it'll continue after that time has passed.
So if you want "AFTER" to happen after 5 seconds, you need to put it inside the coroutine itself.
Alternatively, you could make DoSomething a coroutine as well and yield on TakeABreak, so like this
public IEnumerator DoSomething()
{
print("BEFORE");
yield return StartCoroutine(TakeABreak(5.0f));
print("AFTER");
}
Of course that means you have to start the function with StartCoroutine, which might be bad for a public interface. What I often do is have the public function be a standalone function that calls a StartCoroutine on a private function.
Thank you that works! I'll try your suggestion regarding the public function being standalone that calls a StartCoroutine private function.
Your answer
Follow this Question
Related Questions
What is wrong with this use of WaitForSeconds? 1 Answer
C# WaitForSeconds doesn't seem to work ?? 2 Answers
(c#) Problems with yield 1 Answer
Playing footsteps with interval 1 Answer
Mysteries of yield 1 Answer