Таймеры — одна из первых полезных вещей, которые пригодятся в любой игре: гонка, испытание, мини-игра, магазин со временем действия и т.д. В этом руководстве я подробно покажу как создать таймер с TextLabel и дам 10 готовых вариантов — от простого обратного отсчёта до серверного раунд-таймера и таймера с прогресс-баром. Для каждого примера я укажу куда вставлять скрипт и дам объяснение «пошагово», чтобы даже ребёнок понял.
Важное правило перед началом
GUI-таймеры делаются в LocalScript (они работают у конкретного игрока).
Место для LocalScript: StarterPlayer → StarterPlayerScripts или StarterGui → ScreenGui → LocalScript внутри нужного UI.
Если таймер влияет на всю игру (раунд, событие для всех игроков) — логика должна быть на сервере (Script в ServerScriptService), а сервер уведомляет клиентов через RemoteEvent в ReplicatedStorage.
Всегда используем task.wait() (или RunService) вместо устаревшего wait() для стабильности.
Как создать простейший таймер с TextLabel
В Роблокс Студио открой Explorer и Properties.
В StarterGui создай новый ScreenGui.
Внутри ScreenGui создай TextLabel. Поставь:
Size = UDim2.new(0, 200, 0, 50)
Position = UDim2.new(0.5, -100, 0, 20)
TextScaled = true
Text = "Время: 0"
В ScreenGui добавь LocalScript и вставь туда код таймера (см. ниже в примерах).
Запусти Play — таймер должен работать.
1) Простой обратный отсчёт (LocalScript)
Куда вставлять: StarterGui > ScreenGui > LocalScript
local timeLeft = 30 -- секунды
local label = script.Parent:WaitForChild("TextLabel")
while timeLeft > 0 do
label.Text = "Время: " .. timeLeft
task.wait(1) -- ждём 1 секунду
timeLeft -= 1
end
label.Text = "Время вышло!"
Объяснение: каждую секунду уменьшаем timeLeft и обновляем текст.
2) Отображение формата MIN:SEC (красивая строка)
Куда вставлять: StarterGui > ScreenGui > LocalScript
local timeLeft = 125 -- 2 минуты 5 секунд
local label = script.Parent:WaitForChild("TextLabel")
Преимущество: таймер контролируется сервером — нельзя подделать время, все синхронизированы.
9) Таймер с уведомлением (когда осталось N секунд — показать сообщение)
Куда вставлять: StarterGui > ScreenGui > LocalScript
local label = script.Parent:WaitForChild("TextLabel")
local timeLeft = 20
while timeLeft >= 0 do
label.Text = "Осталось: " .. timeLeft
if timeLeft == 10 then
-- показываем на экране уведомление
local notice = Instance.new("TextLabel", script.Parent)
notice.Size = UDim2.new(0,200,0,50)
notice.Position = UDim2.new(0.5,-100,0.3,0)
notice.Text = "10 секунд осталось!"
task.delay(2, function() notice:Destroy() end)
end
task.wait(1)
timeLeft -= 1
end
label.Text = "Время вышло!"
Используется в: гонках, испытаниях, когда нужно предупредить игрока.
10) Таймер-спаун (по таймеру создаём предмет на сервере)
Куда вставлять:
ServerScriptService > Script (логика спауна).
Предмет для спауна положите в ServerStorage или ReplicatedStorage.
local ServerStorage = game:GetService("ServerStorage")
local spawnItem = ServerStorage:WaitForChild("HealthPack")
local spawnPos = workspace:WaitForChild("SpawnPoint")
while true do
task.wait(30) -- каждые 30 секунд
local clone = spawnItem:Clone()
clone.Parent = workspace
clone.Position = spawnPos.Position
end
Важно: это серверный код — спавн нужен всем, поэтому он на сервере.
Практические советы и частые ошибки
TextLabel должен быть в ScreenGui (в StarterGui), а скрипт — LocalScript, иначе GUI не появится у игрока.
Не запускайте бесконечные циклы без пауз (while true do + task.wait()), иначе Studio «подвиснет».
Для UI используйте RenderStepped, если нужно обновлять каждый кадр (например, плавное движение прогресс-бара). Но для секундного таймера — task.wait(1) проще.
Синхронизация: если таймер влияет на всех — делайте его на сервере и рассылайте клиентам RemoteEvent.
Дебаунс и защита: если у кнопки «старт» есть таймер и игроки могут кликать много раз, используйте флаг debounce, чтобы не запустить таймер несколько раз.
Тестируйте на телефоне — иногда GUI выглядит по-другому на маленьком экране. Используйте Device Emulator.
Борьба с фальшивыми таймерами (читерство)
Если таймер влияет на геймплей (например, покупка предметов, начало/конец раунда), контролируйте его на сервере. Никогда не доверяйте только LocalScript'у для важных действий.
Быстрый чек-лист перед публикацией
GUI появляется у игрока? (да — LocalScript в StarterGui)
Таймер не блокирует игру? (нет зависаний)
Если нужен общий таймер — он на сервере и клиенты получают данные через RemoteEvent.
Таймер показывает корректный формат (мм:сс) — удобно смотреть.
Все кнопки для управления таймером работают (паузa, рестарт).
🚀 Хочешь научиться создавать таймеры и другие крутые фишки в Роблокс Студио?
Записывайся на занятия на сайте roblo.ru! Там ты узнаешь, как делать собственные игры, придумывать задания и удивлять друзей своими проектами. Начни путь разработчика прямо сейчас!