Reproduction Steps
I am applying animations to HumanoidDescription, however, they do not work. The animations are made for an R15 rig, with highest priority set, so no reason not to work.
game.Players.PlayerAdded:Connect(function(player)
local HumanoidDescription = game.Players:GetHumanoidDescriptionFromUserId(player.UserId)
-- Set to blocky
HumanoidDescription.Head = 0
HumanoidDescription.Torso = 0
HumanoidDescription.LeftArm = 0
HumanoidDescription.RightArm = 0
HumanoidDescription.LeftLeg = 0
HumanoidDescription.RightLeg = 0
HumanoidDescription.JumpAnimation = 8037790635
HumanoidDescription.WalkAnimation = 8037792349
if not player or not player.Parent then return end -- Player left
player:LoadCharacterWithHumanoidDescription(HumanoidDescription)
end)
Expected Behavior
The applied animations to actually play, as they should and as the dev hub says they should
the asset you are trying to use is not in the correct format. to look at the format (for a run animation for example), download a catalog run animation using the command bar in Studio with the command e.g game:GetObjects("http://www.roblox.com/Asset/?id=619522386")[1].Parent = game.Workspace. Take a look at the downloaded asset (now in the workspace). In the downloaded asset, change the RunAnimation's AnimationId property to point to the asset id of your previously uploaded animation. Then upload the R15Anim folder to roblox. This will give you an asset id, and it’s this asset id that you set as the RunAnimation property of the HumanoidDescription.
Do similar for the WalkAnimation/JumpAnimation etc
I already tried this after seeing it from somewhere else,
and uploading the R15 folders to the website, and then using their model ids. These did not work.
These are my uploaded
DevHub should also point this out, as it’s incredibly unclear, and I had to spend several hours sifting through forum posts to try finding out what I am supposed to do.
First, as a possible fix to your problem: in some cases, animation IDs stored as objects do not clone properly. If you are running your animation scripts for the player from the client (local scripts), check to see if these fields have disappeared while the game is playing. If they have, I have had luck using server scripts and/or using string values to store animation IDs.
Second, make sure the owner of the game is the person publishing the animation. No one but you can use animations you published in their game.
I do not use HumanoidDescription for my animations, so this is an alternate method, not a fix to your method. Also of note, I don’t use this method anymore either, as I have written my own scripts. I do not know if these methods have been made obsolete.:
You can grab a copy of the “Animate” script while your game is playing in studio, and save a copy. I do not recall if I had to save it in a different game or not. The point is, if you have this script on your character, another copy will not be generated. You can also add it to NPCs in a pinch (though I no longer recommend it). The children to this script serve the same purpose as your HumanoidDescription method. Put the animation ID into this Animation object, and the Animate script updates the default animations with it. A second option is to edit the script itself (which contains hard coded default animation IDs)
I don’t want to fork that script. If Roblox ever changes how animations work or what not, then I’d have to keep redoing this over and over (same reasons I never fork the chat scripts)
I also don’t like the 2k odd lines it has, I like to be pedantic about how many lines of code my game has. If HumanoidDescription has Animation properties, then they should work as intended
this seems like maybe an ownership issue. As said above, make sure you made the animations and the place where you are using the animations. can you run the following in a Script (fill in the animModelId and animId at the top) and make sure you get no errors and the animid is correct, and you get the two assets parented to the workspace at the end
local animModelId = ????????
local animId = ????????
game.Players.CharacterAutoLoads = false
game.Players.PlayerAdded:Connect(function(player)
player:LoadCharacterWithHumanoidDescription(Instance.new("HumanoidDescription"))
local function LoadAsset(id)
local model = nil
local success, err = pcall(function()
local containerModel = game:GetService("InsertService"):LoadAsset(id)
model = containerModel:GetChildren()[1]
model.Parent = nil
containerModel:Destroy()
end)
return model
end
local animFolder = LoadAsset(animModelId)
if not animFolder then
error("error: animFolder didn't download")
return
end
animFolder:Clone().Parent = game.Workspace
print("animation asset id", tostring(animFolder.run.RunAnim.AnimationId), "should be", tostring(animId))
local anim = LoadAsset(animId)
if not anim then
error("error: anim didn't download")
return
end
anim:Clone().Parent = game.Workspace
end)
Is there any further information you can give me, or confirm that this is a bug and needs fixing. Really starting to become a pain as I cannot find any decent work around, and need to use my own animations as I am relying on keyframe stuff to do certain things
if the above worked, then, does the below work for you for changing the animations (fill in the correct animModelId):
local animModelId = ????????
game.Players.CharacterAutoLoads = false
game.Players.PlayerAdded:Connect(function(player)
player:LoadCharacterWithHumanoidDescription(Instance.new("HumanoidDescription"))
local function LoadAsset(id)
local model = nil
local success, err = pcall(function()
local containerModel = game:GetService("InsertService"):LoadAsset(id)
model = containerModel:GetChildren()[1]
model.Parent = nil
containerModel:Destroy()
end)
return model
end
local animFolder = LoadAsset(animModelId)
if not animFolder then
error("error: animFolder didn't download")
return
end
player.Character.Animate.run.Parent = nil
animFolder.run.Parent = player.Character.Animate
end)
Yes the above code got the correct animation to play for me.
Sorry for paraphrasing, but apparently a simple “yes” was considered spam and so I must now prolong my answer in order to not get marked as spam Here is hoping that this is long enough to be not be deemed spam by moderation
Addon to this post, he/she also means if you upload a animation from OTHER groups / Users and use it somewhere else it will not work. You need to have the animation uploaded on the group of the game OR the player that owns the game.
Everything here is uploaded by me. The animation is uploaded to my account, the animation model is uploaded to my account, the game is uploaded to my account. Everything is under my account, no group.
The issue has to do with the experience’s game settings, if your experience does not allow for its players to have custom animations then the code set in Animate script in Character model will not configure for new animations when you set the new HumanoidDescription. This snippet below is from current animate script which prevents custom animations, with the function designed to configure set animations.
local allowCustomAnimations = true
local success, msg = pcall(function() allowCustomAnimations = game:GetService("StarterPlayer").AllowCustomAnimations end)
if not success then
allowCustomAnimations = true
end
You can fork the script or you can set animation values to 0 in a player’s HumanoidDescription on spawn (if you don’t want custom animations in your game but still want to use Animate to apply animations)
This seems to be an ongoing issue with the current Animate script, but this fixed the bug for me.
For additional clarity to anyone else experiencing this issue, changing this specific game setting allows animations to be applied through Humanoid:ApplyDescription():