Upgraded HumanoidDescription API

Hello Creators,

To enable upcoming avatar features, we are rolling out an upgraded HumanoidDescription API. This new API adds new AccessoryDescription and BodyPartDescription sub-instances, which are used as children of a HumanoidDescription.

This change is fully backward compatible with the old HumanoidDescription APIs: changing a property on the HumanoidDescription will modify the relevant AccessoryDescription or BodyPartDescription, and adding, removing, or modifying one of the sub-instances will also modify the HumanoidDescription properties.

Rollout Plan

Due to the complicated backward compatibility requirements, the rollout of this feature will be slightly unusual. We have already rolled it out for RCC and will enable it for clients in the coming days. We won’t be turning this on for Studio until after this has been rolled out to clients and we know we don’t need to turn it off, to avoid needing to remove AccessoryDescriptions and BodyPartDescriptions and move storing the details back into the HumanoidDescription. We will let you know when this has been fully rolled out and it is safe for you to start adding AccessoryDescriptions and BodyPartDescriptions in Studio and start using these in your scripts. Until then, keep using the old API as you have been doing!

Instance support

One big advantage of this change is the HumanoidDescription API now supports using instances for BodyParts and Accessories alongside AssetIds. This means that you can use the HumanoidDescription API to apply an Accessory that only exists in your experience to an avatar without it needing to be uploaded as an asset on the platform. This is supported through the AccessoryDescription.Instance and BodyPartDescription.Instance properties.

Here is an example of how an Instance-based accessory can be applied to an Avatar:

local humanoidDescription : HumanoidDescription = player.Character.Humanoid:GetAppliedDescription()

local accessoryDescription = Instance.new("AccessoryDescription")
accessoryDescription.Instance = game.ReplicatedStorage.HairAccessory
accessoryDescription.IsLayered = false
accessoryDescription.AccessoryType = Enum.AccessoryType.Hair
accessoryDescription.Parent = humanoidDescription

player.Character.Humanoid:ApplyDescription(humanoidDescription)

New Accessory Adjustment Properties

You may notice several new properties on the new AccessoryDescription instance that aren’t supported in the previous API. These Position, Rotation, and Scale properties are not yet enabled but will be very soon. Be on the lookout for an Accessory Adjustment announcement in the coming weeks!

Humanoid.ApplyDescriptionFinished

As part of this upgrade, we have also added a new ApplyDescriptionFinished event to Humanoid. Previously if applying a description on the server, on the client it would be possible to listen to ChildAdded on the Humanoid for the new HumanoidDescription and it would be immediately up to date. This may no longer be true now that the information is split across HumanoidDescription and child instances that may not be parented to the HumanoidDesription at the time this is fired on the client. The ApplyDescriptionFinished event will give the guarantee that the HumanoidDescription is ready to be used and all the sub-instance children exist.

[Edit] Duplicate BodyPart or Asset bug

During the rollout of this change, there was a circumstance when publishing from a team create game to another place caused duplicate AccessoryDescriptions or BodyPartDescriptions to be created. If your game is experiencing this problem, see this post for how to fix it:

For full details on the API, check out the documentation pages for AccessoryDescription and BodyPartDescription.

If you notice any bugs that might be caused by this change or have any feedback for future improvements to the HumanoidDescription API or avatar APIs in general, please let us know!

160 Likes

This topic was automatically opened after 9 minutes.

These flags still work for using the accessory refinement in the Universal App if anyone wants to try it out early!

18 Likes

As you have Humanoid to control your players health… overall…
Would this allow health monitoring for arms, legs and head … for various gaming reasons ?

Or is it strictly accessory attachments to body parts ?

5 Likes

Love to see this new functionality come out!
This will make creating features like rigid armor or HAZMAT suits a lot easier, and that’s not even mentioning how the new accessory adjustments will take customization to the next level. (Glasses not lining up with the eyes on my avatar? Not a problem any more!)

6 Likes

I suppose this is a start to the new feature where we can position accessories right?

Cool stuff, nonetheless.

5 Likes

Another good feature, I can’t wait to see it fully added.

4 Likes

Pretty cool feature can’t wait for the full release

4 Likes

This entirely broke my game, it was applied to my current HD ingame and it was adding duplicated.

Highly annoying i hope this is fixed.
I didn’t touch the HD and it decided to add duplicated effectively breaking my system

6 Likes

Is it still impossible to get the AssetId from the accessory object itself?

3 Likes

Thank you so much for this, especially the part about not needing to upload the asset individually!

5 Likes

Yes, it’s still impossible to get the AssetId directly from the accessory object itself, sadly.

2 Likes

This could not be better timed for me and my team! We were just needing this feature! Thanks so much and kudos to the crew behind this update!

1 Like

Amazing it has finally happened… well it will happen :thinking:

I had it on, on my client the entire time I never encountered an issue and I played through a bunch of different games from The Games.

1 Like

Wait are you suppose to be able to add a HumanoidDescription to a Humanoid and have it automatically apply?

2 Likes

It adds more “Description” instances under the HumanoidDescription.

If they’d be making HumanoidDescription automatically apply when it goes inside a Humanoid, it could probably break some experiences :person_shrugging:

HumanoidDescription is still the root of the descriptions and you have to still call :ApplyDescription()

No, you need to use Humanoid:ApplyDescription to apply a HumanoidDescription, including it’s AccessoryDescripton and BodyPartDescription sub descriptions.

4 Likes

Same here - has utterly destroyed all of our UGC podiums

1 Like

I was just about to make a player customization system, I think Roblox might be reading my mind, the timing of this is extremely uncanny.

Edit: Upon seeing the rest of this post, this seems to be completely unusable for my use case as I require to have duplicate assets.

Can you post a link to your game where you are experiencing this issue? Thanks!

1 Like