Открытие/Закрытие двери по нажатие кнопки в Roblox Studio
Я хочу сделать так чтобы если дверь была открыта то она закрывалась по нажатию кнопки, а если закрыта то открывалась той же кнопкой. Только вот она как только закрылась мгновенно открывается, помогите пожалуйста.
Вот скрипт:
--------------------------------------
local detector = script.Parent
local door = workspace.door
local OpDoor = Vector3.new (1.984, 15.866, -40.75)
local ClDoor = Vector3.new (1.984, 8.866, -40.75)
local StDoor = false
detector.MouseClick:Connect(function()
if StDoor == false then
door.Position = ClDoor
StDoor = true
print("close")
end
if StDoor == true then
door.Position = OpDoor
StDoor = false
print("open")
end
end)
Проблема в том, что вы дважды подключаете функцию к событию MouseClick. В результате, при каждом клике выполняются обе функции, и дверь сразу же открывается после закрытия.
Вот как исправить ваш скрипт:
local detector = script.Parent
local door = workspace.door
local OpDoor = Vector3.new (1.984, 15.866, -40.75)
local ClDoor = Vector3.new (1.984, 8.866, -40.75)
local StDoor = false
detector.MouseClick:Connect(function()
if StDoor == false then
door.Position = ClDoor
StDoor = true
print("close")
else
door.Position = OpDoor
StDoor = false
print("open")
end
end)
Объяснение изменений:
• Одна функция: Мы объединили две функции в одну. Теперь одна функция обрабатывает как открытие, так и закрытие двери, проверяя значение StDoor.
• Проверка StDoor: Внутри функции мы проверяем значение StDoor и выполняем соответствующие действия. Если дверь закрыта (StDoor = true), то мы ее открываем, и наоборот.
Теперь, при каждом клике, будет выполняться только одна функция, и дверь будет правильно открываться и закрываться.
Дополнительные советы:
• Избегайте дублирования кода: В вашем исходном коде было дублирование кода для открытия и закрытия двери. Объединение функций делает ваш скрипт более компактным и читабельным.
• Используйте комментарии: Добавьте комментарии в свой код, чтобы он был более понятным как для вас, так и для других.
Надеюсь, этот код вам поможет! Если у вас возникнут еще вопросы, смело спрашивайте.
1. Создайте кнопку и дверь в вашем проекте Roblox.
2. На кнопку добавьте скрипт, например, `ClickDetector`, чтобы отслеживать нажатия.
3. Добавьте следующий скрипт в `Script` или `LocalScript` в кнопку:
-- Получаем доступ к двери и её состоянию
local door = game.Workspace.Door -- замените 'Door' на имя вашей двери
local isOpen = false
-- Функция для открытия двери
local function openDoor()
-- Добавьте сюда логику для открытия двери
door.Position = door.Position + Vector3.new(0, 0, 5) -- перемещение двери
isOpen = true
end
-- Функция для закрытия двери
local function closeDoor()
-- Добавьте сюда логику для закрытия двери
door.Position = door.Position - Vector3.new(0, 0, 5) -- возврат двери на место
isOpen = false
end
-- Функция, вызываемая при нажатии кнопки
local function onButtonClick()
if isOpen then
closeDoor()
else
openDoor()
end
end
-- Подключаем функцию к событию клика
script.Parent.ClickDetector.MouseClick:Connect(onButtonClick)
Убедитесь, что вы правильно настроили `ClickDetector` и имена объектов (кнопки и двери) в вашем проекте. Если дверь мгновенно открывается после закрытия, возможно, проблема в логике перемещения или в том, как вы обрабатываете события клика. Проверьте, чтобы события не вызывались повторно из-за других скриптов или настроек в вашей сцене.