Try using GetPivot and PivotTo. Also try doing this on the client, you can make it smoother and you get less server lag. A .1 second while loop will inherently be laggy.
Probably use @Temateite’s solution. I can’t believe I forgot physics exist. Just add something like a BodyMover. (Or CylindricalContrainst). (yes, im struggling to type this since my pinky is numb) If this works give HIM the solution, he deserves it.
How is it laggy? You mean it doesn’t appear smooth? Or does it drop frames?
In any case, the way you made your code is also very poor, you should be storing things in variables to prevent unnecessary indexing as well as you should abandon deprecated features like SetPrimaryPartCFrame.
Try this instead.
local FerrisWheel = script.Parent
local ActualPivot = FerrisWheel:GetPivot()
local ActualRotation = CFrame.Angles(0,0,0)
local Increment = CFrame.Angles(math.rad(0.12), 0, 0)
while true do
task.wait(0.1)
ActualRotation *= Increment
FerrisWheel:SetPivot(ActualPivot * ActualRotation)
end
Try tweening it instead of just changing the CFrame directly. This should help optimize it. Just make a loop, and play the tween animation whenever the loop is finished
An activity of 1% isn’t laggy at all, more than that is (like, the lower the better);
As for why your ferris wheel might be choppy might be because it’s unanchored?
Using RunService lets it spin at 60fps (or whatever your framerate is, which is why I added the * dt * 60, which will remove any speed changes from it running slower than 60fps.)
Besides that: 1% activity is good. That means only 1% of the CPU is being used to run your script. It was “laggy” in your eyes likely because you were only updating it every 0.1 seconds, or at about 6fps, rather than at 60.