Animator object is overriding the Transform Property of Motor6d welds while no animation is playing

I simply run a loop binded to renderstep to update the Transform property of motor6d’s of the character, call it a custom animation system, like so:

local function TransformChar(dt)
		i = i + dt
		local alpha = i/frames
		if alpha < 1 then
			for k = 1, #welds do
				if welds[k] and p2[k] then
					--welds[k].C1 = p1[k]:lerp(p2[k],alpha)
					welds[k].Transform = p1[k]:lerp(p2[k],alpha)
				end
			end
		end	
	end
	rservice:BindToRenderStep(rendbind,Enum.RenderPriority.Character.Value+1,TransformChar)`

However, as long as an Animator Object is present under the Humanoid, these changes are just completely ignored.

In this video, when the player enters the batter’s box, it stops all playing animations on the player, it then proceeds with the code written above. However, the updating of Transform properties does nothing to effect the player. Although, other players CAN see the transform property being changed and CAN see the animation play out, as setting the Transform property of other Player’s seems to work fine. It is just the local player that CANNOT see the changes. Also in the video I delete and re add the Animator object multiple times via dev console, and you can see, when the Animator is removed, it works as intended. But when put back, it overwrites the Transform property again.
Video:

Commands used in the dev console:

workspace.["PlayerName"].Humanoid.Animator:Destroy()

local a = Instance.new("Animator") a.Parent = workspace.["PlayerName"].Humanoid

This started happening I believe about 2 days ago (June 26th or 25thish)

Expected behavior

If working correctly, the Animator Object should not be updating the Transform property when it is not playing any animations, Or the changes made manually to the Motor6D instances should overwrite anything the Animator does. For example, if the running animation is playing, a change to the UpperTorso Motor6D’s Transform property should overwrite the running animation changes to the UpperTorso Motor6D.

A private message is associated with this bug report

8 Likes

Thanks for the report. We’ve filed a ticket in our internal database.

3 Likes

Has there been any progress on this bug?

1 Like

bumping as the issue is still present for us, and there has now been recent warnings against using C0/C1. Since editing the transform property does not give us the same desired result as editing C0/C1, it puts us in quite a sticky spot.

It still feels uncertain whether this is the intended functionality or not, but I’d imagine there should be a way to override the motor6D transform regardless of if an animation is playing. If editing C0/C1 is not the intended method for this functionality, then there is seemingly no proper method available to achieve this.

2 Likes

Hi, here’s is a barebones example of how to get around the animator overriding transforms:

local RunService = game:GetService("RunService")
local Players = game:GetService("Players")

local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local rightShoulder = character:WaitForChild("RightUpperArm"):WaitForChild("RightShoulder")

local angle = 0

local function armRotate(deltaTime)
	angle = angle + deltaTime
	local cFrameRotation = CFrame.Angles(-math.rad(angle), 0, 0)
	rightShoulder.Transform = rightShoulder.Transform * cFrameRotation
end

RunService.Stepped:Connect(armRotate)

--RunService:BindToRenderStep("Rotate arm", Enum.RenderPriority.Character.Value + 1, armRotate)

It’s still recommended to use the Transform instead of C0/C1s, but the issue of animator overriding data is more related to the event being binded to. In this case, binding to Stepped instead of RenderStepped should allow manual control to take over.

1 Like

This is still happening.
I am playing no animation tracks inside of an animator, but one of my bone transforms are being reset for no apparent reason. Whenever I destroy the animator (for testing), updating the transform works properly.
If I am to edit the bone’s transform without the animator, it works. When I add the animator back the bone’s transform snaps back to 0, 0, 0.
I am able to provide an rbxm to help solve this.