there is a great module for this called ZonePlus
Which easily lets you hook up responsive “Zones”
local Zone = require(game:GetService("ReplicatedStorage").Zone)
local container = workspace.AModelOfPartsRepresentingTheZone
local zone = Zone.new(container)
zone.playerEntered:Connect(function(player)
-- open door
end)
zone.playerExited:Connect(function(player)
-- close door
end)
``