Tweening / changing specific properties of instances in the presence of an Humanoid causes lag

So basically, I’m using a loop that runs every 2 seconds to tween the parts of my character to random values. The behavior observed is that when tweening instances that have a Humanoid, a momentary lag spike occurs. It’s a very weird behavior, I wish it could just act normally without affecting game performance, even if it’s for a while. I’ve only tested with R15 as of now.

In the video below, I also show this behavior by tweening 3 characters, but without a Humanoid present in them, which basically doesn’t even touch the FPS at all.

Video showcasing the issue here

Expected behavior

I expect the tweens applied to character parts to run smoothly without causing any momentary FPS drops, regardless of whether the model contains a Humanoid or not. The performance should remain stable without any problems. In other words, the presence of a Humanoid inside the model should not significantly impact the frame rate during tween operations… not as that much to be honest. If that only happens by simply making a character invisible, now imagine 5-10 of them at the same time.

5 Likes

Just adding onto this - it appears a major regression has happened, previously (literally a week or so ago), rigs with humanoids unlinked to the character getting tweened had almost no performance loss, now, unlinked rigs are suffering the same sort of fps tanking -

local parts = {}

for _, v in pairs(Afterimage_Rig:GetDescendants()) do
	if v:IsA("BasePart") then
		if v.Transparency >= 1 then continue end
		parts[#parts + 1] = v
	end
end

local driver = Instance.new("NumberValue")
driver.Value = Transparency_Range.Min
game.Debris:AddItem(driver, 4)

local conn
conn = driver:GetPropertyChangedSignal("Value"):Connect(function()
	local val = driver.Value

	for i = 1, #parts do
		parts[i].LocalTransparencyModifier = val
	end
end)

task.delay(4, function()
	if conn then
		conn:Disconnect()
	end
end)

local tween = ts:Create(
	driver,
	TweenInfo.new(0.03, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, -1, true),
	{ Value = Transparency_Range.Max }
)

tween:Play()

This work around helps achieve the same tween with little to no performance loss as a workaround for now - but not too long ago the regular tweening method was working without issue