Tweening CFrame doesn't always work, not possible?

I am trying to tween one CFrame to another, but it only works reliably on shallow inclines. On steeper ones like this, the tween snaps at the end.

Does this mean the rotating operation just isn’t performable? Or is there some other issue here.

EDIT: Just to clarify, the tween isn’t getting canceled. I’ve tried to tween and not perform any other actions afterwards, with the same result.

1 Like

We’re going to have to see how you’ve coded this to know exactly what’s wrong. Are you using TweenService, or your own tweening code? If the latter, does it use CFrame:lerp(), or something of your own design?

I’m using TweenService to tween it, nothing custom.

        local Destination = GetInclineCFrame(InclineHit, Node.CFrame.LookVector, CurrentNormal, Normal) 
		Destination = Destination *,Node.Size.Y / 2,0)
			* CFrame.Angles(0,math.rad(-90),0)
		NewTime = .6
		WalkTween(Node, Destination, NewTime)

function WalkTween(Node, Destination, NewTime)
	local VarTime
	if NewTime then
		VarTime = NewTime
		VarTime = Time
	local TweenData =, Enum.EasingStyle.Linear)
	local NewTween = TweenService:Create(Node, TweenData, {CFrame = Destination})

Can you post a simple repro place (rbxl file)? There are a lot of unknowns here still, like whether this is a prescripted animation, or the block shown is player-controlled. At first glance, it looks like more than one bit of script might be trying to orient the block. Or that the end-state of the tween does not match whatever sets the orientation right after the tween (something is still moving the block, right? I mean, it keeps sliding).

Your video looks like it’s two separate tweens, with two destinations. Maybe debug print out each time a new destination is found, and each time a tween starts?