What you could do is just get a Part with a SurfaceGui that’s always CFramed in front of the head and make it big enough so that they can’t see around it. I haven’t tried this myself but it seems like it can work.
It is essentially a way to manipulate the position of a part. For example, to make the player teleport to a part you would write something like this: Character.Head.CFrame = game.Workspace.Teleport.CFrame where Character is a variable that stores the player’s character. If you are still not sure what a CFrame is, try looking on the developer hub or just googling “Roblox studio CFrame”