Assistance needed with anim tranisition

I am trying to make the linear transition as smooth and not visible as possible.

I want to make it so the transition is smooth, nonlinear, and not visible at all.
By not being visible, I mean that the transition is so good that you cannot tell it’s there.

I have tried using this module: Xanimator V.3.1.0 | Smooth/Nonlinear animation transitions (Discontinued)
But that didn’t make the animation transition smooth at all; it just made it instant.

Please let me know how I can solve this!

Video below


You have to pay close attention to the transition between reload and idle; there is a linear and slow movement

2 Likes

Looks great, and even more natural.

Other than tuning it in the animation(s) themselves,
there are a bunch of extended options for playing animations like..

animation:Play(fadeTime, weight, speed)
animation:Stop(fadeTime)
animation:AdjustSpeed(speed)
animation:AdjustWeight(weight, fadeTime)

A bit of fine tuning here may get what you’re looking for.

2 Likes

The issue here is I shouldn’t stop any animation.
I want the idle animation to resume when other animations are done playing, but the transition is really bad.

utilise AnimationPriority to put the main animations in front, and the idles in the back
research AnimationPriority here → AnimationPriority | Documentation - Roblox Creator Hub

This way, you don’t need stop any animations, just make sure action animations have a higher priority, then they can play together

Did you read the post? Stopping the animations isn’t the issue.
I made this post for the linear animation transition that I want to edit so it’s unnoticed.

1 Like

I have my own wrapper that fixes that; but for short you just need to adjust the weight that’s all

I have a 2nd method which I also took from the same post:

local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://17862783974"

local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)

local TweenService = game:GetService("TweenService")
local NumberValue = Instance.new("NumberValue")
local Tween = TweenService:Create(NumberValue, TweenInfo.new(1, Enum.EasingStyle.Exponential, Enum.EasingDirection.InOut), {Value = 1})

NumberValue:GetPropertyChangedSignal("Value"):Connect(function()
	animationTrack:AdjustWeight(NumberValue.Value)
	print(NumberValue.Value)
end)

task.wait(2)
Tween:Play()
animationTrack:Play()
2 Likes

Seems like the animation is stopping too early.

1 Like

Can you PLEASE for the love of god read the damn post?

I tried adjusting the weight, but that didnt really work out since the position of the gun constantly changes due to the idle animation so the transition becomes off.

Show the script where you tried to use the extended options..

I can tell by your current message that you didn’t read the post.
Firstly, if you can barely see it, it still means that you can see it.

Secondly, if you’re not going to help me and tell me to just keep it, please do not comment on this post.

Thirdly, this is not an animation editor bug; this is from the linear transition that Roblox made to switch between animations.

DO YOUR RESEARCH BEFORE TRYING TO HELP ANYONE. IF YOU’RE GOING TO TELL THEM TO KEEP IT, THEN DO NOT EVEN BOTHER HELPING THEM.

I was asking where you’re using SetWeight and other extended commands.
Really haven’t even taken a look at Xanimator to debug it as a package, or will be using it myself.
Is there an error output, a chunk of code, or a setting you’re not understanding?
Maybe it would be best to ask on the concept page you linked.

Assistance: They are using extended commands like SetWeight, If you’re trying on your own.
Maybe do some research on how all that works, seem like a straightforward concept.

Basically you want to fight the engine, I love it. but how roblox works under the hood is, when you play or fade an animation track in roblox using :play() or adjustweight() the engine updates the weightcurrent toward weighttarget, correct? This process uses linear interpolation over time

The slight jerking is how roblox’s engine calculates the weight progression strictly in a straight line, switching between 2 animated poses, especially when on track is a moving idle track, this will cause a velocity jump (a like sharp angle in motion) right at the start and end of the cross fade

Some bypasses you could do is changing the last 3 frames of the reload animation or viewmodel wtv u got going on to match the start of the idle

You COULD manually interpoalte AnimationTrack.WeightCurrent using non-linear curve like sine, quad, or cubic over time using RunService or TweenService BUT this will cause a lot of bloat and overhead, cause roblox replicates WeightCurrent

And to be honest this problem is very small and not that noticeable.