← Все практические скрипты
Мини-проекты · Уверенный · 35 мин

Мини-проект: лазерный коридор

Лазеры наносят урон, контрольная точка сохраняет место появления.

Иллюстрация: Мини-проект: лазерный коридор
🎯 Что получится

Коридор из лазеров с безопасной контрольной точкой и задержкой между ударами.

1. Подготовьте объект

Где разместить: Несколько скриптов — смотрите инструкцию и отдельные блоки кода

Создайте Workspace → Folder LaserHall. Добавьте несколько красных Part с Anchored=true и CanTouch=true — это лазеры.
Создайте Part Checkpoint с Anchored=true, CanCollide=false, CanTouch=true и разместите его за лазерами.
В ServerScriptService добавьте Script LaserSystem и Script CheckpointSystem, вставьте соответствующие блоки кода.
В Play проверьте: лазер наносит урон, а после касания Checkpoint новое появление происходит возле точки.

Карта файлов в Explorer

Это пути для скриптов из блоков кода ниже. Остальные объекты создайте по инструкции.

└── ServerScriptService
    ├── LaserSystem (Script)
    └── CheckpointSystem (Script)

2. Вставьте код

ServerScriptService/LaserSystem (Script)
local Players = game:GetService("Players")
local folder = workspace:WaitForChild("LaserHall")
local HIT_DAMAGE = 25
local HIT_COOLDOWN = 1
local lastHit = {} -- [humanoid] = time
local function attach(laser)
    if not laser:IsA("BasePart") then return end
    laser.Touched:Connect(function(hit)
        local model = hit:FindFirstAncestorOfClass("Model")
        local humanoid = model and model:FindFirstChildOfClass("Humanoid")
        local player = model and Players:GetPlayerFromCharacter(model)
        if not humanoid or not player or humanoid.Health <= 0 then return end
        local now = os.clock()
        if now - (lastHit[humanoid] or -math.huge) < HIT_COOLDOWN then return end
        lastHit[humanoid] = now
        humanoid:TakeDamage(HIT_DAMAGE)
    end)
end
for _, laser in ipairs(folder:GetChildren()) do attach(laser) end
folder.ChildAdded:Connect(attach)
Players.PlayerRemoving:Connect(function(player)
    if player.Character then
        local hum = player.Character:FindFirstChildOfClass("Humanoid")
        if hum then lastHit[hum] = nil end
    end
end)
ServerScriptService/CheckpointSystem (Script)
local Players = game:GetService("Players")
local checkpoint = workspace:WaitForChild("Checkpoint")
local saved = {} -- checkpoint is for this server session
checkpoint.Touched:Connect(function(hit)
    local model = hit:FindFirstAncestorOfClass("Model")
    local player = model and Players:GetPlayerFromCharacter(model)
    if player then saved[player] = checkpoint.CFrame + Vector3.new(0, 5, 0) end
end)
local function onPlayer(player)
    player.CharacterAdded:Connect(function(character)
        local root = character:WaitForChild("HumanoidRootPart", 10)
        if root and saved[player] then
            task.wait(0.1)
            character:PivotTo(saved[player])
        end
    end)
end
Players.PlayerAdded:Connect(onPlayer)
for _, player in ipairs(Players:GetPlayers()) do onPlayer(player) end
Players.PlayerRemoving:Connect(function(player) saved[player] = nil end)

3. Проверьте в игре

Нажмите Play в Roblox Studio и проверьте действие механики. Если механика не работает, откройте окно Output и проверьте тип скрипта, его расположение и названия объектов.

Ваш прогресс

Когда проверите механику в Roblox Studio, отметьте практику как выполненную. Отметка хранится только в этом браузере, не в личном кабинете.

Если объединяете несколько скриптов

Добавляйте механики по одной и проверяйте окно Output. Не создавайте несколько одинаковых систем монет или интерфейсов; скрипты, меняющие WalkSpeed, прыжок или освещение, могут влиять друг на друга.

⭐ Три шага к собственной игре
1. Повторите и измените

Измените урон лазера с 25 до 10.

2. Улучшите

Постройте три коридора с разной плотностью лазеров.

3. Придумайте своё

Сделайте лабораторию с тремя контрольными точками (потребуется расширить таблицу saved).

4. Проверьте себя

Зачем в лазерном коридоре нужна контрольная точка?

🛠 Если не работает

Оба Script должны быть в ServerScriptService. Folder LaserHall и Part Checkpoint находятся прямо в Workspace. Точки не сохраняются после выхода из игры.