Top.Mail.Ru
Ответы

Открытие/Закрытие двери по нажатие кнопки в 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)

По дате
По рейтингу
Аватар пользователя
Новичок
7мес

Проблема в том, что вы дважды подключаете функцию к событию 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), то мы ее открываем, и наоборот.

Теперь, при каждом клике, будет выполняться только одна функция, и дверь будет правильно открываться и закрываться.

Дополнительные советы:

• Избегайте дублирования кода: В вашем исходном коде было дублирование кода для открытия и закрытия двери. Объединение функций делает ваш скрипт более компактным и читабельным.
• Используйте комментарии: Добавьте комментарии в свой код, чтобы он был более понятным как для вас, так и для других.

Надеюсь, этот код вам поможет! Если у вас возникнут еще вопросы, смело спрашивайте.

Аватар пользователя
Мудрец
7мес

1. Создайте кнопку и дверь в вашем проекте Roblox.
2. На кнопку добавьте скрипт, например, `ClickDetector`, чтобы отслеживать нажатия.
3. Добавьте следующий скрипт в `Script` или `LocalScript` в кнопку:

1234567891011121314151617181920212223242526272829
 -- Получаем доступ к двери и её состоянию 
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` и имена объектов (кнопки и двери) в вашем проекте. Если дверь мгновенно открывается после закрытия, возможно, проблема в логике перемещения или в том, как вы обрабатываете события клика. Проверьте, чтобы события не вызывались повторно из-за других скриптов или настроек в вашей сцене.