Простой таймер обратного отсчёта в Unity

Привет. Таймер — базовая механика в разработке игр. Они запускаются перед сбросом ежедневного задания или бонусного сундука, когда мы посадили картошку, начали строить здание или разбирать завалы. Посмотрите на любимые игры и увидите таймеры повсюду.

В Unity есть простой способ создания таймера, который я сегодня и покажу. А ещё покажу его альтернативный вариант и вариант с графическим индикатором вместо текста.

Самый простой таймер

Его реализация очень простая. Указываем время в секундах и отнимает от него detlaTime пока оно не будет равным нулю. Пока таймер работает – регулярно обновляем текст.

В данному случае главная проблема в том, что таймер находится в Update функции. Т.е. этот скрипт добавит ещё одну функцию, которую нужно выполнять каждый кадр. Как по мне, так более удачным решением будет использование корутин.

Простой, но с использованием Coroutine

Код будет практически такой же, но нам не нужно держать булеву переменную для запуска таймера. Вместо этого мы будем запускать корутину.

Работает аналогично, но в корутине, и не привязан к обновлению кадра.

Графический таймер

Иногда нам нужен не текст, а картинка, которая будет отображать прогресс чего-то. Вроде навыков с кд в играх. Такого эффекта достичь тоже очень легко. Сначала заменим Text на Image. Вместо функции обновления текста мы будем указывать процент заполненности изображения от 0 до 1.

Для получения соотношения делим оставшееся время на изначальное. Можно использовать Clamp, чтобы убедиться, что это число точно будет в заданных рамках. И указываем это значение для Image.

В редакторе указываем, что выбранный Image будет иметь тип Filled:

Для радиального эффекта заполнения
Для горизонтального эффекта заполнения

Что приятно: один и тот же скрипт подходит для всех вариантов заполнения картинки. Удобно.

И в итоге получаем что-то такое:

И итоговая сцена у меня выглядит так. Первый текстовый таймер сделан через Update, а второй через корутину.

На идею натолкнул short «How to Create a Simple Countdown Timer in Unity»

Оставьте комментарий

Пролистать наверх