Touchedが何回も反応してしまう
入門トラブル更新日:2026年11月13日Luauの型チェック済み
ひとことで言うと
ふれたときの処理が、一度に何回も動いてしまう問題の直し方(デバウンス)です。
この記事で使うAPI
原因
キャラクターは、頭・胴体・手足など、たくさんのパーツでできています。それぞれがふれるたびにTouchedが起きるので、一度ふれただけで何回も反応します。
直し方:デバウンス
「処理中かどうか」を変数で覚えておき、処理中なら何もしないようにします。この考え方をデバウンスといいます。
(Script/置く場所:パーツの中)
local part = script.Parent :: BasePart
local debounce = false
part.Touched:Connect(function(hit)
if debounce then
return
end
local character = hit.Parent
if not character or not character:FindFirstChildWhichIsA("Humanoid") then
return
end
debounce = true
task.wait(0.5)
part.Transparency = 1
part.CanCollide = false
task.wait(3)
part.Transparency = 0
part.CanCollide = true
debounce = false
end)
プレイヤーごとに1回にしたいとき
テーブルに、もう反応したプレイヤーを記録します。
local touched = {}
local part = script.Parent
part.Touched:Connect(function(hit)
local player = game:GetService("Players"):GetPlayerFromCharacter(hit.Parent)
if player and not touched[player] then
touched[player] = true
print(player.Name .. "がふれました")
end
end)