How to keep track if an animation is loaded on a humanoid or not?

I have a function foo, when triggered plays an animation on a humanoid, given arguments are an Animation object and a humanoid object, How do I know if that animation is already loaded on that humanoid and, if it is loaded then just play that?

1 Like

It should be pretty simple! All you have to do is make a nil variable, and in function foo, detect if it isn’t nil, which means it should have an animation loaded onto it. Here’s some sample code if it helps.

local anim -- this is the variable you set to the loaded animation

local function foo()
	if anim ~= nil then -- check to see if it has a loaded animation
		anim:Play()
	end
end

I recommend you making a getAnim function

local loadedAnimations = {}
local function getAnim(animObject)
if loadedAnimations[animObject] then
return loadedAnimations[animObject]
end

loadedAnimations[animObject] = animator:LoadAnimation(animObject)
return  loadedAnimations[animObject]
end)

now you can just do getAnim(animationObject):Play() and not worry about it overloading

Not this, this has a flaw, You are indexing with animObject, but what if I load this animation on animator A and try to get on animator B? This is going to cause issues. Is there anyway to just get all loaded animation tracks on a humanoid or animator?

if you want to use this for multiple animators then do this:

local loadedAnimations = {}
local function getAnim(animator, animObject)
loadedAnimations[animator] = loadedAnimations[animator] or {}
if loadedAnimations[animator][animObject] then
return loadedAnimations[animator][animObject]
end

loadedAnimations[animator][animObject] = animator:LoadAnimation(animObject)
return  loadedAnimations[animator][animObject]
end)
1 Like

Yep It works, I’ve also learned that if a track is already loaded, it won’t load again if used LoadAnimation more than once, and it ain’t gonna give out memory leaks.