Чем вы запускаете новый Coroutine в OnEnable
, поэтому каждый раз, когда GameObject снова становится активным.
Вам лучше проверить, закончился ли ваш обратный отсчет раньше или нет, и только перезапускать его, если он был завершен.до.
Кроме того, вы не останавливаете сопрограмму при приостановке заметки из Сопрограммы:
Примечание : сопрограммы не останавливается, когда MonoBehaviour является отключенным , но только когда он определенно уничтожен.Вы можете остановить сопрограмму, используя MonoBehaviour.StopCoroutine и MonoBehaviour.StopAllCoroutines .Сопрограммы также останавливаются, когда MonoBehaviour уничтожен.
И поскольку вы используете Time.timeScale = 0f;
для паузы, вы должны использовать WaitForSecondsRealtime для ожидания, которое не 't зависит от Time.timeScale
public Color color3;
public Color color2;
public Color color1;
private Text countdown;
// moved this to outer scope in order to
// "share" it among routines
int count = 3;
// flag to control whether the last countdown was finished
private bool countdownFinished = true;
private void Awake()
{
// do this only once
countdown = GetComponent<Text>();
}
private void OnEnable()
{
countdown.text = count.ToString();
StartCoroutine(Countdown());
}
private void OnDisable()
{
// just to be sure cancel all running Coroutines
// should be done anyway automatically
StopAllCoroutines();
}
private IEnumerator Countdown()
{
// only restart the countdown if it was finished before
// otherwise continue the last one
if (countdownFinished) count = 3;
countdownFinished = false;
// inverting that for loop would make things a lot
// easier for you
while (count > 0)
{
countdown.text = count.ToString();
// better use a switch for that
switch (count)
{
case 3:
countdown.color = color3;
break;
case 2:
countdown.color = color2;
break;
case 1:
countdown.color = color1;
break;
}
yield return new WaitForSecondsRealtime(1);
count--;
}
countdownFinished = true;
StartRound();
}
Результат: Продолжается, если обратный отсчет не завершился до отключения, иначе начинается новый отсчет.

для примера, который я только что сделал
private void StartRound()
{
countdown.text = "GO!";
}
Вместо этого переключателя вы также можете просто использовать
public List<Color> colors = new List<Color>();
, чтобы добавить свои цвета в список (самый верхний пчелиный цвет1, самый нижний пчелиный цвет3), а затем просто используйте
countdown.color = colors[count -1];