petushok55
@petushok55
Обучаюсь на практике.

Почему таймер в корутине ускоряется?

При нажатии на кнопку "старт" запускается корутина(таймер) , который считает сколько времени ожидает игрок.
При нажатии на "отмена", корутина должна перестать работать.
Если после отмены начать старт ещё раз, то таймер должен начинаться с нуля.
Всё работает как надо, НО если быстро клацать старт-стоп, то с каждым клацанием ускоряется счётчик таймера
public void StartTimer() // запуск таймера по нажатию на кнопку
    {
        StartCoroutine(WaitTimer());
        isSearch = true;
    }
    public void StopTimer() // отмена
    {
        isSearch = false;
        //StopCoroutine(WaitTimer()); // так тоже пытался, но толку нет
    }
    private IEnumerator WaitTimer()
    {
        min= 0;
        sec= 0;

        if (isSearch == false)
        {
            yield break;
        }

        while (isSearch == true)
        {
            if(sec== 59)
            {
                min++;
                sec= -1;
            }
            sec++;

            timer.text = min.ToString("D2") + ":" + sec.ToString("D2");
            yield return new WaitForSeconds(1);
        }

    }
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos Куратор тега Unity
Ну так у вас при старте корутины СРАЗУ прибавляется секунда, а потом вы ждете секунду. Естественно если пройдет меньше секунды между включениями - счетчик все равно увеличится
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы