haktan/src
← resources / tutorials / stop-using-touched
FREEtutorial · 6 min read · Jul 8, 2026

Stop using .Touched: zone detection that actually works

Touched events miss fast-moving players, fire multiple times, and break with anchored parts. Here's the spatial-query approach I use in every commission — with the full module to download at the end.

Why .Touched fails

Touched relies on physics contacts. A player moving fast can pass through a thin zone between physics steps, so the event never fires. You end up padding zones and debouncing — and it's still unreliable at 16+ studs/s.

The spatial-query approach

Instead of waiting for physics, we ask every Heartbeat: which parts are inside this box right now?

ZoneDetect.luau — core loopfull source — 4 lines
local parts = workspace:GetPartBoundsInBox(zone.CFrame, zone.Size)for _, part in parts do track(part) -- enter/leave bookkeepingend
.luau
Get the full module
ZoneDetect.luau · v3.1.0 · MIT
View resource →