- Home /
WaitForSeconds not running
Hello, I am trying to start this coroutine, and from the debug log it shows the WaitInSeconds being called, but it doesn't wait and counts quickly to 3. What am I doing wrong? Could this be related to the frame rate?
Also, on line 27, if I decrement the countdown_timer going from 3 to 1, Unity just freezes and starts to consume cpu cycles and I end up killing unity. I'm not seeing an infinite loop here, unless there's something else going on?
using UnityEngine;
using System.Collections;
public class Countdown : MonoBehaviour {
public static int countdown_timer;
private TypogenicText tText;
// Use this for initialization
void Start () {
tText = GetComponent<TypogenicText>();
countdown_timer = 1;
}
// Update is called once per frame
void Update () {
while(countdown_timer < 4)
{
Debug.Log("Countdown for loop: " + countdown_timer);
tText.Text = countdown_timer.ToString();
tText.RebuildMesh();
countdown_timer += 1;
StartCoroutine(WaitInSeconds(1.0f));
}
}
IEnumerator WaitInSeconds(float secs)
{
Debug.Log ("WaitInSeconds for " + secs);
yield return new WaitForSeconds(secs);
}
}
Any help is appreciated, thanks!
Answer by abertronski · Jul 09, 2014 at 02:24 AM
Found the following. Looks like calling the coroutine from update is the way to go, this way the WaitForSeconds function works. Guess I didn't grasp how a coroutine works.
http://answers.unity3d.com/questions/221127/another-question-about-yield-waitforseconds-in-c.html
Answer by DoctorMoney · Jul 09, 2014 at 01:29 AM
You can't start a coroutine inside an update function. You'd need to call the coroutine from another function and then have it loop back to the update. I'd provide code but I have no idea how to code with C# sorry :/
Thanks, yeah I found another post and added as an answer moderator just didn't approve yet. However the waitforseconds still only worked for one second. I ended up using the time.deltatime. This appears to be a better friend when dealing with frames and the update() functions.
if (countdown_timer > 1) {
Debug.Log("countdown_timer is greater than 1");
countdown_timer -= Time.deltaTime;
tText.Text = countdown_timer.ToString ();
tText.Rebuild$$anonymous$$esh ();
}
Thanks!
Your answer
Follow this Question
Related Questions
C# WaitForSeconds doesn't seem to work ?? 2 Answers
Playing footsteps with interval 1 Answer
(c#) Problems with yield 1 Answer
In coroutin function,if(x) { yield return a } . if(y) { yield return b }. Is it possible? 0 Answers
Mysteries of yield 1 Answer