I use this
game:GetService("RunService").RenderStepped:wait()
As a wait but it only seems to work some of the time.
It's in a localscript btw so I don't think that's the problem. I keep getting the error that it can only be used in a localscript for some reason. The localscript is inside a server script that copies the script into every new player if that info helps.
the event RenderStepped
only works in localscripts
so if it is in a server-sided script then it will not work.