(video of my door working) https://gyazo.com/ccd0dde5f7c5d22eab143cf2da7e4763

So what I am doing now is using two invisible and not collideable parts to detect if player is inside the building or not. Because you don't want your player to be stuck between door and wall. But .Touched Events is not very trustworthy so I want to use different method. Can you give me better methods?

local Players = game:GetService("Players")
local Debounce = false
local Open = false
local inc = 1/10
local center = script.Parent.Parent.Center
script.Parent.PrimaryPart = script.Parent.Hinge

local TweenService = game:GetService("TweenService")
local Info = TweenInfo.new(.3)
local goals = {
	CFrame = script.Parent.PrimaryPart.CFrame * CFrame.Angles(0,-math.rad(90),0)
}

local VAPE = TweenService:Create(script.Parent.PrimaryPart, Info, goals)

local CloseSound = Instance.new("Sound", script.Parent)
CloseSound.SoundId = 'rbxassetid://192416584'
CloseSound.Volume = 1

local OpenSound = Instance.new("Sound", script.Parent)
OpenSound.SoundId = 'rbxassetid://320946744'
OpenSound.Volume = 1

local function tweenModel(model, CF)
	local CFrameValue = Instance.new("CFrameValue")
	CFrameValue.Value = model:GetPrimaryPartCFrame()

	CFrameValue:GetPropertyChangedSignal("Value"):connect(function()
		model:SetPrimaryPartCFrame(CFrameValue.Value)
	end)
	
	local tween = TweenService:Create(CFrameValue, Info, {Value = CF})
	tween:Play()
	
	tween.Completed:connect(function()
		CFrameValue:Destroy()
	end)
end

Players.PlayerAdded:Connect(function(player)
	print(player.Name.." found")
script.Parent.Parent.Trigger1.Touched:Connect(function(hit)
	if Debounce == false then
		Debounce = true
		if (hit.Parent:FindFirstChild("Humanoid") ~= nil) then
			print("Humanoid found")
			if Open == false then
				tweenModel(script.Parent, script.Parent.PrimaryPart.CFrame * CFrame.Angles(0, -math.rad(90), 0))
				OpenSound:Play()
				wait(.3)
				Open = true
			end
		end

		repeat wait() until 7 <= (center.Position - player.Character.HumanoidRootPart.Position).magnitude
		
		if Open == true then
			tweenModel(script.Parent, script.Parent.PrimaryPart.CFrame * CFrame.Angles(0, math.rad(90), 0))
			wait(.3)
			CloseSound:Play()
			Open = false
		end
		Debounce = false
	end
end)

script.Parent.Parent.Trigger2.Touched:Connect(function(hit)
	if Debounce == false then
		Debounce = true
		if (hit.Parent:FindFirstChild("Humanoid") ~= nil) then
			print("Humanoid found")
			if Open == false then
				tweenModel(script.Parent, script.Parent.PrimaryPart.CFrame * CFrame.Angles(0, math.rad(90), 0))
				OpenSound:Play()
				wait(.3)
                Open = true
			end
		end

		repeat wait() until 7 <= (center.Position - player.Character.HumanoidRootPart.Position).magnitude
		
		if Open == true then
			tweenModel(script.Parent, script.Parent.PrimaryPart.CFrame * CFrame.Angles(0, -math.rad(90), 0))
			wait(.3)
			CloseSound:Play()
			Open = false
		end
		Debounce = false
	end	
	end)
end)