Tween only CFrame.p?

Is it possible to tween only the position property of the CFrame? I cannot tween the Position property as safe move is still a thing :expressionless:

1 Like

Why don’t you just tween the CFrame? Is there some reason that you only want to tween the Position?

Also I was experimenting and it didn’t seem possible to tween CFrame.p :stuck_out_tongue:
but this did work when I made it in a script in a part, it sets the part’s CFrame to the CFrame of another identical part, but idk if this is what you want…
here you go anyway

game:GetService("TweenService"):Create(script.Parent,, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut), {CFrame = workspace.otherPart.CFrame}):Play()

1 Like

Because the rotation is already being modified by a BodyGyro so if I tween the whole CFrame there is a visible shake.


You can tween the entire CFrame and only change the position part of the CFrame, however this will not work if you need to have the rotation part of the CFrame changing external to the Tween.

Looks like there’s no other way to do this with TweenService unless safe move is disabled. You will need to tween the position manually.

If I were to lerp it, how would I lerp just the position part of the CFrame while keeping the rotation from the BodyGyro?

You can use CFrame - CFrame.p to get just the rotation part of the CFrame.
So you get the rotation of the current CFrame, and set it to a new CFrame with position lerped (or at any arbitrary point), translated by the old rotation.

local part ="Part",workspace) -- Your part here
local pos =,10,0)
local rot = part.CFrame - part.CFrame.p
part.CFrame = * rot

Then it’s just a case of doing a simple lerp between the positions. You can do this manually or with Vector3.Lerp.