How to improve this following screen/part script?

I wanted to make a screen that follows near your face. But it has a delay and it’s turns strange.
I want to make a screen that will follow you without delay, like it’s a part of your head and make it turn better.

image

image

Classic Script:

game.Players.PlayerAdded:Connect(function(plr)
	if plr.Name == "DVHACKER" then
		
		while true do
			local headPos = game.Workspace:WaitForChild(plr.Name).Head.Position
			local headOri = game.Workspace:WaitForChild(plr.Name).Head.Orientation
			script.Parent.Position = headPos - Vector3.new(0,0,5)
			script.Parent.Orientation = headOri
			wait()
		end
		
	end
end)

The smoothest you can get is using RunService.Stepped instead of wait(). Also, I would put it inside a CharacterAdded event.

RunService.Stepped isn’t synced to the game’s render cycle / refresh rate, so it’ll still appear “jagged” or “jumpy”. Use RunService.RenderStepped instead.

It only works from a LocalScript though, so consider changing your script to work as a LocalScript.

You can replace the wait() call with RunService.RenderStepped:Wait(). Remember to put RunService = game:GetService("RunService") at the top of your script.

RenderStepped is only on the client, and he is using a server script because of the PlayerAdded event.

It still has a delay. When I do a step, it moves after ~0.01 seconds.

I want to make a screen that will follow you without delay, like it’s a part of your head.

Don’t overcomplicate it, just use welds, it’s simple and replicates on the server.

RunService.Stepped isn’t synced to the game’s render cycle / refresh rate, so it’ll still appear “jagged” or “jumpy”. Use RunService.RenderStepped instead.

Since the server runs on 60 FPS, Stepped will fire 60 times per second if used on the server (can also slow down if those 60 fps aren’t consistent) . It won’t appear jagged or jumpy. Stepped runs on physics stimulation while RenderStepped runs before frame rendering and can only be used on the client.