Smoothest Transition Between Animation & CFrame?

Hey there everyone! I was wondering how can I achieve the smoothest transition possible between an Animation and a CFrame?

Basically imagine playing an Equip Animation and when a Tool reaches your LeftHand (When Animation Ends), set the CFrame of that Tool in a RenderStep to the LeftHand!

I tried doing this, but it makes a jitter effect in that transition and that is possibly because of the frame in RunService. I have also tried Heartbeat, Stepped and RenderStepped, but none of them make that smooth transition.

Does anyone have experience with this? If so, please share your knowledge here! If you have any suggestions or ideas please reply! Anything helps!

Regards,
Awe

Why not check when animation stops playing and straight away set the CFrame

I’ve already said “I tried doing it” in the topic. It makes a jitter effect, so I can’t make that transition come true.

Have you tried adding an event to your animation? Here’s this tutorial:

Once you’ve added your animation event to your animation, you can use the function AnimationTrack:GetMarkerReachedSignal() to make a connection to the event.

Would look something like this:

local animation = script.Animation
local animationTrack = animator:LoadAnimation(animation)
animationTrack:GetMarkerReachedSignal("EquipEvent"):Connect(function()
    -- add code to cframe sword here
end)

I could try, but it seems that whenever I set the CFrame of the tool, it will always spawn at the center of my character and then set the CFrame. That’s what makes the jitter effect.

Make sure that the tool is non collide and welded to the character’s arm. This should stop the jitter effect for sure!

I will try to make it non-collide, but it’s not welded, it’s connected to the Character’s UpperTorso with Motor6D!

Here is a Video for a Reference:

Current Code:

local function _Play_Equip(ActionName, InputState, InputObject)
	if InputState == Enum.UserInputState.Begin then
		Equip_Track:Play()
		Equip_Track.Stopped:Connect(function()
			Arm_Idle_Track:Play()
			Idle_Track:Play()
			RunService.Stepped:Connect(function()
				Violin.Handle.Main.WorldCFrame = Character:WaitForChild("LeftHand").CFrame * CFrame.Angles(0, math.rad(90), 0) * CFrame.new(0, -0.6, 0)
			end)
		end)
	end
end

ContextActionService:BindAction("Equip", _Play_Equip, false, Enum.KeyCode.E)
1 Like

Ohhh okay, in that case you should make sure that the Motor6D connected to the UpperTorso is disabled, then make a new Motor6D/Weld to the arm to attach the weapon to the arm. That one should be enabled then disabled/deleted once unequipped. The weapon must be non-collide to stop the physics engine from doing anything to the character.

1 Like

Does that mean I shouldn’t set the CFrame, because If I set the CFrame it will position it correctly to the LeftHand and I won’t be using RunService, because WeldConstraint will do the job, but whenever I set the CFrame it still makes the jitter effect, if I don’t set it, then it will float my Bow on my head!

I’ve tried both methods you’ve told me, but none of them make a good transition, whenever I set the CFrame, it just creates that jitter effect. I need to set the CFrame, so my bow can be positioned correctly!
image
I managed to catch that frame when, the jitter happens.