Ниже — несколько базовых скриптов для Obby(Obstacle Course) в Roblox, решающихтипичные задачи. Все примеры на языке Lua,используемом в Roblox Studio.
1. Скрипт для «убийства» игрока прикасании препятствия
Помещается в Part (препятствие), которой должен наносить урон.
script.Parent.Touched:Connect(function(hit)
if hit and hit.Parent and hit.Parent:FindFirstChild("Humanoid" then
hit.Parent.Humanoid.Health = 0
end
end)
Как работает:
- При касании объекта (Touched) проверяется, есть ли у коснувшегося объекта родитель (Parent).
- Если у родителя есть Humanoid (т. е. это персонаж игрока), то здоровье (Health) устанавливается в 0 — игрок «умирает».
2. Скрипт чекпоинта (точки сохранения)
Помещается в Part, который будет чекпоинтом.
local spawn = script.Parent
spawn.Touched:Connect(function(hit)
if hit and hit.Parent and hit.Parent:FindFirstChild("Humanoid" then
local player = game.Players:GetPlayerFromCharacter(hit.Parent)
local checkpointData = game.ServerStorage:FindFirstChild("CheckpointData"
if not checkpointData then
checkpointData = Instance.new("Model", game.ServerStorage)
checkpointData.Name = "CheckpointData"
end
local checkpoint = checkpointData:FindFirstChild(tostring(player.UserId))
if not checkpoint then
checkpoint = Instance.new("ObjectValue", checkpointData)
checkpoint.Name = tostring(player.UserId)
player.CharacterAdded:Connect(function(character)
wait()
character:WaitForChild("HumanoidRootPart".CFrame =
game.ServerStorage.CheckpointData[tostring(player.UserId)].Value.CFrame + Vector3.new(0, 4, 0)
end)
end
checkpoint.Value = spawn
end
end)
Как работает:
- При касании чекпоинта сохраняется позиция игрока в ServerStorage.
- При возрождении (CharacterAdded) персонаж появляется у последнего сохранённого чекпоинта.
3. Скрипт движущейся платформы (конвейер)
Помещается в движущуюся часть (например, конвейер).
local conveyor = script.Parent
conveyor.Velocity = conveyor.CFrame:VectorToWorldSpace(Vector3.new(0, 0, -conveyor.Configuration.Speed.Value))
conveyor.SurfaceGui.Enabled = false
Как работает:
- Задаёт скорость движения части (Velocity) в направлении, заданном CFrame.
- Отключает SurfaceGui (если есть), чтобы не мешал.
4. Скрипт таймера уровня
Помещается в ServerScriptService. Отображает время прохождения в HUD.
local Players = game:GetService("Players"
local ReplicatedStorage = game:GetService("ReplicatedStorage"
-- Создаём RemoteEvent для передачи времени клиенту
local TimerEvent = Instance.new("RemoteEvent"
TimerEvent.Name = "UpdateTimer"
TimerEvent.Parent = ReplicatedStorage
-- Функция таймера
local function startTimer(player)
local startTime = tick()
while player.Character and player.Character:FindFirstChild("Humanoid" and player.Character.Humanoid.Health > 0 do
local elapsedTime = string.format("%.2f", tick() - startTime)
TimerEvent:FireClient(player, elapsedTime)
wait(0.1)
end
end
-- Запуск таймера для каждого игрока
Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function()
startTimer(player)
end)
end)
Как работает:
- Запускает таймер при появлении персонажа игрока.
- Каждую 0.1 секунды отправляет текущее время (elapsedTime) на клиент через RemoteEvent.
- На клиенте (в StarterPlayerScripts) нужно обработать событие и отобразить время в UI.
Как добавить скрипт в игру
Важные замечания
- Для чекпоинтов убедитесь, что в ServerStorage есть папка CheckpointData (или скрипт создаст её автоматически).
- Для таймера на клиенте нужно добавить обработчик RemoteEvent для отображения времени в UI.
- Тестируйте скрипты в режиме Play, чтобы проверить логику.
База данных Roblox developer site