It is because you’re using the “while wait()” loop. Try using this instead!
wait(10)--Wait for you to load in game
while true do
BodyPosition.Position = character:WaitForChild("HumanoidRootPart").Position + Vector3.new(0,0,-4)
BodyGyro.CFrame = character:WaitForChild("HumanoidRootPart").CFrame
end
From my understanding in this script below:
while wait() do
BodyPosition.Position = character:WaitForChild("HumanoidRootPart").Position + Vector3.new(0,0,-4)
BodyGyro.CFrame = character:WaitForChild("HumanoidRootPart").CFrame
The wait will loop the code inside of it after every wait. So I believe this is what’s causing what appears to be “lag”, but is only the script waiting however long it’s supposed to wait before changing its position again. Hope this helps!
The lag in the first few seconds is just Studio loading you into the game. There’s not much you can do about that and it’s not your scripts causing it.
This is generally better practice, but won’t solve the lagginess when you first join the place.