I am making a top down shooter and when the player walks in a room with a ceiling, I want the ceiling to go transparent and when the player walks out the ceiling should go back to opaque.

The current camera script looks like this:

local currentCamera = workspace.CurrentCamera
	local offset = Vector3.new(-0.01,30,0)
	local player = game.Players.LocalPlayer
	 
	local lobbyactive = game:GetService("ReplicatedStorage").Values.LobbyActive
	 
	local updateCameraEvent = game.ReplicatedStorage.Events.UpdateCamera
	 
	local mode = "lobby"
	 
	player.CharacterAdded:Wait()
	player.Character:WaitForChild("HumanoidRootPart")
	local humRoot = player.Character:WaitForChild("HumanoidRootPart")
	 
	currentCamera.CameraSubject = humRoot
	currentCamera.CameraType = Enum.CameraType.Scriptable
	currentCamera.FieldOfView = 90
	 
	 
	 
	 
	updateCameraEvent.OnClientEvent:Connect(function()
	    if lobbyactive.Value == true then
	        mode = "lobby"
	    elseif lobbyactive.Value == false then
	        mode = "game"
	    end
	end)
	 
	 
	game:GetService('RunService').Stepped:Connect(function()
	    if mode == "lobby" then
	        currentCamera.CFrame = CFrame.new(workspace.CameraPart.Position, Vector3.new(0,0,0))
	    elseif mode == "game" then
	        currentCamera.CFrame = CFrame.new((humRoot.Position + offset), humRoot.Position)   
	    end
	end)

I also already have the DevCameraOcclusionMode set to invisicam but it doesn't work :/

I have also tried to use a raycast but once the part is invisible it doesn't change back.