hello, after making THREE posts and not getting help on any of them this is my last attempt at making a post so hopefully, someone can help me out here

I’m making a slenderman game on Roblox and I’m trying to get the static GUI to work when slender is being looked at. However, the GUI can still activate through walls for some reason even though I scripted the raycast stuff.

here’s my code (the whole thing lol):

local camera = workspace.CurrentCamera
local mouse = game.Players.LocalPlayer:GetMouse()

local p = game.Players.LocalPlayer

local c = p.Character or p.CharacterAdded:Wait()


local VisCheck = function(Obj)
	local raycastParams = RaycastParams.new()
	raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
	raycastParams.FilterDescendantsInstances = {game.Players.LocalPlayer.Character}
	raycastParams.IgnoreWater = true
	local raycastResult = workspace:Raycast(camera.CFrame.Position, CFrame.new(camera.CFrame.Position,Obj.Position).LookVector*5000, raycastParams)
	if raycastResult ~= nil then
		if raycastResult.Instance:IsDescendantOf(Obj.Parent) then
			if Obj.Parent.Humanoid.Health > 0 then
				return true
			end
		else
			return false
		end
	end
	return false
end

local StartUITrack = function(Obj)
	local worldPos = Obj.Position
	local pos, isOnScreen = camera:WorldToScreenPoint(worldPos)
	local fixedposx = pos.x
	local fixedposy = pos.y
	local IsInLib,num = false, nil

	if isOnScreen then
		if VisCheck(Obj)== true then
			return true
		end
	else 

	end

	return false
end







while wait() do
	
	local mag;
	
	local range = game.Lighting.FogEnd - 2;

	local cansee = true
	
	local DummyHead = workspace.Slenderman["Meshes/torso (3)"]
	
	coroutine.wrap(function()
		while wait() do
			mag = (c.Torso.Position - DummyHead.Position).magnitude;
		end
	end)()
	
	local WG = workspace.Slenderman
	
	coroutine.wrap(function()
		while wait() do
			local Position, CanSee = camera:WorldToScreenPoint(workspace.Slenderman["Meshes/thehead"].Position)
			if CanSee and mag <= range and cansee then 

				local StaticMain = script.Parent.StaticGUI
				local Static1 = StaticMain.Static1
				local StaticSound = script.StaticSound

				StaticSound.Playing = true
				StaticSound.Looped = true

				StaticSound.Volume = 1 /mag * 2

				StaticMain.Enabled = true
				Static1.Visible = true
				Static1.ImageTransparency = 0.50 * mag / 8.55
				wait(0.1)
				Static1.ImageTransparency = 0.75 * mag / 8.55
				wait(0.1)
				Static1.ImageTransparency = 0.25 * mag / 8.55
				wait(0.1)
				Static1.ImageTransparency = 0.9 * mag  / 8.55
				wait(0.1)

			else

				local StaticMain = script.Parent.StaticGUI
				local Static1 = StaticMain.Static1
				local StaticSound = script.StaticSound

				StaticMain.Enabled = false
				StaticSound.Playing = false

			end;
		end;
	end)()

	local IsSeen = StartUITrack(WG["Meshes/thehead"])
	if IsSeen == true then

	end

end

any help is greatly appreciated, thank you in advance