You’ve probably come to the point, where you “jump while moving in the air” and stop at the last millisecond moving while fully landed, and encounter this animation bug that only occours on R6:
Now the question:
How do we fix this bug?
After investigating the Animate localscript (That’s always inside your character when you load in by default btw) and while searching for the problem, I’ve found a solution.
First of all, test the game, and copy the ‘Animate’ localscript, that’s inside your player character.
Then be sure to paste it inside the StarterPlayer → StarterCharacterScripts, in the way, that the game can’t place the default Animate script when you run the game, allowing you to edit it in studio.
The code at line 347 (inside the Animate localscript) has the onRunning function, which is meant to animate your player character (the walking / running animation for your character).
Now taking a look at the code, you’ll see:
function onRunning(speed)
if speed > 0.01 then
playAnimation("walk", 0.1, Humanoid)
if currentAnimInstance and currentAnimInstance.AnimationId == "http://www.roblox.com/asset/?id=180426354" then
setAnimationSpeed(speed / 14.5)
end
pose = "Running"
else
if emoteNames[currentAnim] == nil then
playAnimation("idle", 0.1, Humanoid)
pose = "Standing"
end
end
end
Now, the problem is that the code works with the Humanoid.Running property, which was I guess ‘an old way to check if the player is running’, but we should use the ‘advanced’ code to check, if a player is walking / running, which is by working with the .MoveDirection property, and then using .Magnitude, to check the distance between the humanoid’s MoveDirection, and if it’s bigger than 0, then we indeed know, that the player character is moving.
Code: Humanoid.MoveDirection.Magnitude > 0
So what we do is we’ll just replace at line 347 (inside the Animate script):
This unedited code:
function onRunning(speed)
if speed > 0.01 then
playAnimation("walk", 0.1, Humanoid)
if currentAnimInstance and currentAnimInstance.AnimationId == "http://www.roblox.com/asset/?id=180426354" then
setAnimationSpeed(speed / 14.5)
end
pose = "Running"
else
if emoteNames[currentAnim] == nil then
playAnimation("idle", 0.1, Humanoid)
pose = "Standing"
end
end
end
To this edited code:
function onRunning(speed)
if Humanoid.MoveDirection.Magnitude > 0 then
playAnimation("walk", 0.1, Humanoid)
if currentAnimInstance and currentAnimInstance.AnimationId == "http://www.roblox.com/asset/?id=180426354" then
setAnimationSpeed(speed / 14.5)
end
pose = "Running"
else
if emoteNames[currentAnim] == nil then
playAnimation("idle", 0.1, Humanoid)
pose = "Standing"
end
end
end
And awesome!, our problem is solved. The issue was simply the Humanoid.Running ‘speed > 0.01’ part, which once again, is a bad way to measure, if the player is now walking / running or not.
This was my first post btw, apologies, if It’s not that good ‘decorated’.