Большой проект: побег из лаборатории
Три ключ-карты, лазеры, контрольная точка и дверь на выход.
Мини-игра на поиск трёх карт с дверью, лазерами и возрождением у контрольной точки.
1. Подготовьте объект
Где разместить: Отдельные блоки кода: создайте файлы в указанных местах
В Workspace создайте Folder LabCards. Внутри три Part с именами Card1, Card2 и Card3. Установите Anchored=true, CanTouch=true, CanCollide=false.
В Workspace создайте Part LabExit (Anchored=true), а также Part LabCheckpoint (Anchored=true, CanTouch=true). Создайте Folder LabLasers и разместите в нём опасные Parts.
В ServerScriptService создайте три обычных Script: LabCardsAndDoor, LabCheckpointScript и LabLaserScript. Скопируйте код каждого файла отдельно.
Для испытания запустите Play: найдите три карты, пройдите лазеры, сохранитесь на контрольной точке и нажмите E у двери. Системы независимы, не требуют Coins.
Это пути для скриптов из блоков кода ниже. Остальные объекты создайте по инструкции.
└── ServerScriptService
├── LabCardsAndDoor (Script)
├── LabCheckpointScript (Script)
└── LabLaserScript (Script)2. Вставьте код
local Players = game:GetService("Players")
local cards = workspace:WaitForChild("LabCards")
local door = workspace:WaitForChild("LabExit")
local collected = {}
local prompt = Instance.new("ProximityPrompt")
prompt.ActionText = "Открыть выход"
prompt.ObjectText = "Нужны три карты"
prompt.MaxActivationDistance = 10
prompt.Parent = door
local open = false
for _, card in ipairs(cards:GetChildren()) do
if card:IsA("BasePart") then
card.Touched:Connect(function(hit)
local char = hit:FindFirstAncestorOfClass("Model")
local player = char and Players:GetPlayerFromCharacter(char)
if not player then return end
collected[player] = collected[player] or {}
collected[player][card.Name] = true
end)
end
end
prompt.Triggered:Connect(function(player)
if open then return end
local found = collected[player] or {}
if not (found.Card1 and found.Card2 and found.Card3) then return end
open = true
prompt.Enabled = false
door.Transparency = 0.75
door.CanCollide = false
task.wait(8)
door.CanCollide = true
door.Transparency = 0
prompt.Enabled = true
open = false
end)
Players.PlayerRemoving:Connect(function(player) collected[player] = nil end)local Players = game:GetService("Players")
local checkpoint = workspace:WaitForChild("LabCheckpoint")
local saved = {}
checkpoint.Touched:Connect(function(hit)
local char = hit:FindFirstAncestorOfClass("Model")
local player = char and Players:GetPlayerFromCharacter(char)
if player then saved[player] = checkpoint.CFrame + Vector3.new(0, 5, 0) end
end)
local function bind(player)
player.CharacterAdded:Connect(function(char)
local root = char:WaitForChild("HumanoidRootPart", 10)
if root and saved[player] then
task.wait(0.15)
char:PivotTo(saved[player])
end
end)
end
Players.PlayerAdded:Connect(bind)
for _, player in ipairs(Players:GetPlayers()) do bind(player) end
Players.PlayerRemoving:Connect(function(player) saved[player] = nil end)local Players = game:GetService("Players")
local lasers = workspace:WaitForChild("LabLasers")
local nextHit = {}
local function connect(laser)
if not laser:IsA("BasePart") then return end
laser.Touched:Connect(function(hit)
local char = hit:FindFirstAncestorOfClass("Model")
local hum = char and char:FindFirstChildOfClass("Humanoid")
local player = char and Players:GetPlayerFromCharacter(char)
if not player or not hum or hum.Health <= 0 then return end
local now = os.clock()
if now < (nextHit[hum] or 0) then return end
nextHit[hum] = now + 1
hum:TakeDamage(20)
end)
end
for _, obj in ipairs(lasers:GetChildren()) do connect(obj) end
lasers.ChildAdded:Connect(connect)3. Проверьте в игре
Нажмите Play в Roblox Studio и проверьте действие механики. Если механика не работает, откройте окно Output и проверьте тип скрипта, его расположение и названия объектов.
Когда проверите механику в Roblox Studio, отметьте практику как выполненную. Отметка хранится только в этом браузере, не в личном кабинете.
Добавляйте механики по одной и проверяйте окно Output. Не создавайте несколько одинаковых систем монет или интерфейсов; скрипты, меняющие WalkSpeed, прыжок или освещение, могут влиять друг на друга.
Измените урон лазеров с 20 на 10.
Разместите карты на разных этажах и добавьте подсказки.
Постройте собственную историю побега с тремя комнатами и несколькими развилками.
4. Проверьте себя
Какие механики объединены в большом проекте лаборатории?
Имена LabCards, Card1–Card3, LabExit, LabCheckpoint и LabLasers должны совпадать точно. Дверь общая для игроков; прогресс не сохраняется после выхода.