Вызов ивента с задержкой. Как сделать?

У меня есть скрипт для того, чтоб когда я касался куба у него отнималось ХП

local cube = workspace.Cube
local HP = cube.Healthbar

local function Healtbar() do
    HP.Value = HP.Value - 5
end

cube.Touched:Connect(Healthbar)

Но ХП отнимается слишком быстро, буквально каждый фрейм когда я сталкиваюсь с кубом, а я хотел бы, чтоб после получения урона происходила небольшая пауза, после чего урон снова проходил, но простое wait() - не работает.


Ответы (2 шт):

Автор решения: Александр Пушкин
local cube = workspace.Cube
local HP = cube.Healthbar

local delay = 1
local waiting = false

local function Healtbar() do
    if waiting == false then
        HP.Value = HP.Value - 5
        waiting = true
        wait(delay)
        waiting = false
    end
end

cube.Touched:Connect(Healthbar)
→ Ссылка
Автор решения: Егор
local cube = workspace.Cube
local HP = cube.Healthbar

local lock = false

local function Healtbar() do
    if not lock then
        lock = true
        HP.Value = HP.Value - 5
        task.wait(--[[тут время ожидания]])
        lock = false
    end
end

cube.Touched:Connect(Healthbar)

Смысл в том, что Touched действительно запускается каждый кадр.

Тут просто проверяется, закончила ли выполнение прошлая функция, если нет, то ничего не происходит.

→ Ссылка