Кнопка, открывающая дверь — одна из самых популярных механик в играх. Она используется в квестах, обби, хоррорах и приключениях. Ниже — полный разбор: от простой версии до продвинутой системы с анимацией, звуками и защитой от ошибок.
📌 1. Принцип работы механики
Связка выглядит так:
Игрок → нажимает кнопку → срабатывает событие → выполняется скрипт → дверь меняет состояние
📍 Основные элементы:
- Кнопка (Button)
- Дверь (Door)
- Событие (ClickDetector / ProximityPrompt)
- Скрипт (логика)
⚙️ 2. Создание объектов
🧱 Дверь:
- Вставь Part
- Назови: Door
- Свойства:
- Anchored = true
- CanCollide = true
- Размер: как дверь
🔘 Кнопка:
- Вставь Part
- Назови: Button
- Сделай маленькой (как кнопка на стене)
📍 Добавь в кнопку:
- ClickDetector (или ProximityPrompt — позже)
💻 3. Простая система (кнопка → дверь)
Добавь Script внутрь кнопки:
local button = script.Parent
local click = button:FindFirstChild("ClickDetector")
local door = workspace:FindFirstChild("Door")
local isOpen = false
local moveDistance = 5
click.MouseClick:Connect(function(player)
if not door then
warn("Дверь не найдена!")
return
end
if isOpen then
door.Position = door.Position - Vector3.new(0, 0, moveDistance)
else
door.Position = door.Position + Vector3.new(0, 0, moveDistance)
end
isOpen = not isOpen
end)📌 Что происходит:
- Проверяем, есть ли дверь
- Меняем её позицию
- Запоминаем состояние (открыта/закрыта)
🎬 4. Плавная анимация двери (TweenService)
Резкое движение выглядит плохо — добавим плавность:
local TweenService = game:GetService("TweenService")
local button = script.Parent
local click = button.ClickDetector
local door = workspace.Door
local isOpen = false
local closedPos = door.Position
local openPos = door.Position + Vector3.new(0, 0, 5)
local tweenInfo = TweenInfo.new(1, Enum.EasingStyle.Sine, Enum.EasingDirection.Out)
local function toggleDoor()
local goal = {}
if isOpen then
goal.Position = closedPos
else
goal.Position = openPos
end
local tween = TweenService:Create(door, tweenInfo, goal)
tween:Play()
isOpen = not isOpen
end
click.MouseClick:Connect(toggleDoor)📌 Теперь дверь открывается красиво и плавно 🎥
🔘 5. Анимация кнопки (эффект нажатия)
local TweenService = game:GetService("TweenService")
local button = script.Parent
local pressedPos = button.Position - Vector3.new(0, 0.2, 0)
local defaultPos = button.Position
local function pressEffect()
local down = TweenService:Create(button, TweenInfo.new(0.1), {Position = pressedPos})
local up = TweenService:Create(button, TweenInfo.new(0.1), {Position = defaultPos})
down:Play()
down.Completed:Wait()
up:Play()
end📌 Вызывай pressEffect() при нажатии кнопки
⚡ 6. Современный способ: ProximityPrompt
Лучше подходит для:
- 📱 мобильных устройств
- 🎮 геймпадов
- 💻 ПК
➤ Как сделать:
- Удали ClickDetector
- Добавь ProximityPrompt в кнопку
local prompt = script.Parent.ProximityPrompt
local door = workspace.Door
local open = false
prompt.Triggered:Connect(function(player)
if open then
door.Position = door.Position - Vector3.new(0,0,5)
else
door.Position = door.Position + Vector3.new(0,0,5)
end
open = not open
end)📌 Игрок нажимает E, чтобы открыть дверь
🔐 7. Система доступа (ключ или условие)
Пример: дверь открывается только если есть предмет
prompt.Triggered:Connect(function(player)
local hasKey = player:FindFirstChild("Key")
if hasKey then
print("Дверь открыта")
else
warn("Нужен ключ!")
end
end)🔊 8. Добавление звука
- Вставь Sound в кнопку или дверь
- В скрипте:
local sound = script.Parent:FindFirstChild("Sound")
if sound then
sound:Play()
end🎯 9. Полезные улучшения
✔ Автозакрытие через время
✔ Индикатор (лампочка):
- зелёный = открыто
- красный = закрыто
✔ Несколько кнопок → одна дверь
✔ Одна кнопка → несколько дверей
⚠️ 10. Частые ошибки
❌ Дверь не найдена (неправильное имя)
❌ Скрипт не внутри кнопки
❌ Нет ClickDetector / ProximityPrompt
❌ Дверь не Anchored
❌ Дверь уезжает всё дальше (нет сохранения позиции)
🧠 Итог
Теперь ты умеешь:
- создавать кнопку
- связывать её с дверью
- делать анимации
- добавлять звук и условия
📍 Эта механика — база для:
- квестов
- уровней
- головоломок
- сюжетных игр
🔗 Полезные ссылки:
🚀 Хочешь научиться делать свои игры?
Переходи на roblo.ru и запишись на обучение Роблокс Студио!
И не забудь заглянуть в наш Telegram 👉 t.me/robloppo
