And if I do it like this, then it will be Object Space, except I need it so that if I call it multiple times it is still rotated only 20 degrees. The big issue here is the * CFrame.fromEulerAngles keeps adding degrees, I want it so that it sets the degree of the CFrame.
This does work in Object Space, but the problem is that I need to make it so where it sets that as the CFrame’s Rotation, because I have a loop that calls it multiple times, and I need to make sure that the degress is not over 20. I need to make sure that each time it sets it to 20 and not over. So * CFrame.Angles and * CFrame.fromEulerAngles doesn’t appear to work in this scenario.
local Original = Part.CFrame
BGyro.CFrame = Original * CFrame.new(math.rad(20)*math.clamp(Part.Velocity.X,0,1),0,math.rad(20)*math.clamp(Part.Velocity.Z,0,1))
This will not work. Velocity is not relevant and you are composing a non-oriented CFrame onto the existing Gyro CFrame which will have no effect on the rotation it produces.
@anon84731415 I would recommend that you have a read about AlignOrientation, a non-legacy constraint object which will let you achieve what you want without having to do any maths at run-time.