How do I make tweens more "choppy" or "stop-motion like"?

I want to make tweens (for 3D things like parts) more “choppy” and “stop-motion-like”, and in animations, I do that by making the EasingStyle constant, but there is no constant option in tweening.

I already did research, but it was of no help.

1 Like

Unfortunately, I don’t think this is possible. You’d have to use repeated lerping, which would allow you to approach a goal at a custom pace.

Here are some example functions for this, they tween a part’s CFrame using lerps which make it choppy. The only difference between them is the getEasingStyleProgress function within, which can be changed to give different easing styles.

-- optionally place the function's contents inside of a thread creator (like task.spawn()) so that the tweens act like real ones)
function lerpCFTweenLinear(part: BasePart, goal: CFrame, tweenDuration: number, lerpCount: number)
	
	local function getEasingStyleProgress(timeProgress: number)
		return timeProgress
	end
	
	for i = 1, lerpCount do
		local currentTimeProgress = getEasingStyleProgress(i / lerpCount)
		local previousTimeProgress = getEasingStyleProgress((i - 1) / lerpCount)
		local lerpAlpha = (currentTimeProgress - previousTimeProgress) / (1 - previousTimeProgress)
		part.CFrame = part.CFrame:Lerp(goal, lerpAlpha)
		task.wait(tweenDuration / lerpCount)
	end
end

function lerpCFTweenSquareRoot(part: BasePart, goal: CFrame, tweenDuration: number, lerpCount: number)

	local function getEasingStyleProgress(timeProgress: number)
		return math.sqrt(timeProgress)
	end

	for i = 1, lerpCount do
		local currentTimeProgress = getEasingStyleProgress(i / lerpCount)
		local previousTimeProgress = getEasingStyleProgress((i - 1) / lerpCount)
		local lerpAlpha = (currentTimeProgress - previousTimeProgress) / (1 - previousTimeProgress)
		part.CFrame = part.CFrame:Lerp(goal, lerpAlpha)
		task.wait(tweenDuration / lerpCount)
	end
end

Divide your tweens, i.e use more. Instead of 0-1 cubic interpolation do, 0-0.1, 0-0.2, 0-0.3, etc.

you could change the position of the part every millisecond or so with a while loop.