Мини-проект: гонка на время
Старт, финиш, честный замер времени и личный рекорд в текущем раунде.
Таймер фиксирует время пробежки и лучший результат игрока за текущий сеанс.
1. Подготовьте объект
Где разместить: Несколько скриптов — смотрите инструкцию и отдельные блоки кода
В Workspace создайте два Part: RaceStart и RaceFinish. Сделайте их Anchored=true, CanTouch=true, расположите на противоположных концах трассы.
В ServerScriptService создайте обычный Script RaceTimer и вставьте код.
Включите Play. Коснитесь старта, пробегите маршрут и коснитесь финиша. Результат появится в Output сервера.
Для показа на экране можно добавить интерфейс отдельным уроком.
Это пути для скриптов из блоков кода ниже. Остальные объекты создайте по инструкции.
└── ServerScriptService
└── RaceTimer (Script)2. Вставьте код
local Players = game:GetService("Players")
local startPart = workspace:WaitForChild("RaceStart")
local finishPart = workspace:WaitForChild("RaceFinish")
local started = {}
local best = {}
local TOUCH_COOLDOWN = 2
local nextStart = {}
local function getPlayer(hit)
local char = hit:FindFirstAncestorOfClass("Model")
local hum = char and char:FindFirstChildOfClass("Humanoid")
return hum and hum.Health > 0 and Players:GetPlayerFromCharacter(char)
end
startPart.Touched:Connect(function(hit)
local player = getPlayer(hit)
if not player then return end
local now = os.clock()
if now < (nextStart[player] or 0) then return end
nextStart[player] = now + TOUCH_COOLDOWN
started[player] = now
print(player.Name .. ": старт!")
end)
finishPart.Touched:Connect(function(hit)
local player = getPlayer(hit)
if not player or not started[player] then return end
local elapsed = os.clock() - started[player]
if elapsed < 1 then return end -- защита от мгновенного финиша
started[player] = nil
best[player] = math.min(elapsed, best[player] or math.huge)
print(string.format("%s: %.2f сек; рекорд %.2f сек", player.Name, elapsed, best[player]))
end)
Players.PlayerRemoving:Connect(function(player)
started[player], best[player], nextStart[player] = nil, nil, nil
end)3. Проверьте в игре
Нажмите Play в Roblox Studio и проверьте действие механики. Если механика не работает, откройте окно Output и проверьте тип скрипта, его расположение и названия объектов.
Когда проверите механику в Roblox Studio, отметьте практику как выполненную. Отметка хранится только в этом браузере, не в личном кабинете.
Добавляйте механики по одной и проверяйте окно Output. Не создавайте несколько одинаковых систем монет или интерфейсов; скрипты, меняющие WalkSpeed, прыжок или освещение, могут влиять друг на друга.
Сделайте трассу длиннее.
Добавьте прыжки и туннели между стартом и финишем.
Создайте три трассы: лёгкую, среднюю и сложную.
4. Проверьте себя
Когда следует остановить секундомер гонки?
В Output отображаются серверные сообщения, а не игровой интерфейс. Рекорды не сохраняются между посещениями.