I know this is a simple question, and probably has a simple answer, but I want my timer to go: “3” “2” “1” “GO!” and it only goes: “3” “2” “1” “GO!” “0” “-1” and so on.
public class countDownTimer : MonoBehaviour { public int timeLeft = 60; //Seconds Overall public Text countdown; //UI Text Object void Start () { StartCoroutine("LoseTime"); Time.timeScale = 1; //Just making sure that the timeScale is right } void Update () { countdown.text = ("" + timeLeft); //Showing the Score on the Canvas } //Simple Coroutine IEnumerator LoseTime() { for (int i = 3; i >=0; i--) { yield return new WaitForSeconds (1); timeLeft--; i++; if (timeLeft == 0) { countdown.text = ("go"); // i = 0; }}}}
Where it says //i = 0 is the problem, i think. Whenever i uncomment that script piece, it completly stops the timer
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class countDownTimer : MonoBehaviour
{
private float timeLeft;
public Text countdown;
void Start()
{
timeLeft = 3;
Time.timeScale = 1; //Just making sure that the timeScale is right
}
void Update()
{
timeLeft -= Time.deltaTime;
if (timeLeft > 0)
{
countdown.text = Mathf.CeilToInt(timeLeft).ToString();
}
else if (timeLeft < -1)
{
countdown.CrossFadeAlpha(0, 0.2f, true); // Hide text
enabled = false; // Stop timer
}
else
{
countdown.text = "Go!";
}
}
}
If you want to keep a coroutine
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class countDownTimer : MonoBehaviour
{
public int timeLeft = 3;
public Text countdown;
void Start()
{
StartCoroutine(Countdown(timeLeft));
Time.timeScale = 1; //Just making sure that the timeScale is right
}
IEnumerator Countdown(int time)
{
WaitForSeconds wait = new WaitForSeconds(1);
for(; time > 0; --time)
{
countdown.text = time.ToString();
yield return wait;
}
countdown.text = "Go!";
yield return wait;
countdown.CrossFadeAlpha(0, 0.2f, true); // Hide text
}
}