- Home /
На вопрос ответили. Правильный ответ был принят
Timer with Coroutine
So I've been trying to make a timer with coroutine. Duration should be 0, but timerUi.SetActive(false) don't work and minimum value of duration equal 1.
IEnumerator Timer(int duration)
{
timerUi.SetActive(true);
while (duration >= 0)
{
timerText.text = duration.ToString();
duration--;
yield return new WaitForSeconds(1f);
}
yield return new WaitForSeconds(1f);
timerUi.SetActive(false);
}
Answer by nikolaisedov92 · Dec 07, 2019 at 11:37 AM
I don't know how it will be more correct, but this work
IEnumerator Timer(float duration)
{
timerUi.SetActive(true);
while (duration >= 0)
{
timerText.text = duration.ToString("0");
duration -= Time.deltaTime;
yield return null;
}
timerUi.SetActive(false);
}
Answer by jleemans · Dec 08, 2019 at 11:06 AM
With duration = 0, you will wait 2 sec. Try :
IEnumerator Timer(int duration)
{
timerUi.SetActive(true);
while (duration > 0)
{
timerText.text = duration.ToString();
--duration;
yield return new WaitForSeconds(1f);
}
timerUi.SetActive(false);
}
What do you mean by 'timerUi.SetActive(false) don't work' ?
Answer by keni4 · Dec 07, 2019 at 10:44 AM
Hi, @nikolaisedov92 . If your duration parameter set to 0, the loop runs one time - you get 1 sec wait, and after loop you have "wait one more second". So by the end you have 2 sec total wait.
Try this:
IEnumerator Timer(int duration)
{
timerUi.SetActive(true);
while (duration >= 0)
{
timerText.text = duration.ToString();
yield return new WaitForSeconds(1f);
duration--;
}
timerUi.SetActive(false);
}
Hi, @keni4. Nothing changed. After while() looping coroutine stop. I tried print() after while() looping and it don't work :)
Follow this Question
Related Questions
How to set timer for WWW helper? 1 Answer
SpeedBoost won't reset : Problem with either WaitForSeconds or Coroutine (Solved) 2 Answers
How do I make the timeScale not affect the timer? 1 Answer
Trying to make a timer work.. 0 Answers
countdown timer 0 Answers