Genies SDK Avatar v3.8.4
Updated: April 10, 2026
Breaking Changes
- Updating to this version requires a clean import or else it will break projects. See the Update the SDK page for instructions.
- Built-in Avatar Editor extracted to separate package - The Avatar Editor is now a standalone package. All editor methods on
AvatarSdk(e.g.,OpenAvatarEditorAsync,CloseAvatarEditorAsync,SetEditorSave*) now log errors and no-op. To restore editor functionality, see the Legacy Avatar Editor page for instructions. - Cinemachine dependency removed - Cinemachine is no longer included as an SDK dependency. If your project relies on Cinemachine, add it as a direct dependency in your project's manifest.
- Several wearable and color methods deprecated - See the [Deprecations] section below for more details.
- Feature stat methods renamed to async - Three methods have been renamed and now return
UniTask:
| Old Method | New Method |
|---|---|
ModifyAvatarFeatureStat(...) | ModifyAvatarFeatureStatAsync(...) returns UniTask<bool> |
ModifyAvatarFeatureStats(...) | ModifyAvatarFeatureStatsAsync(...) returns UniTask<bool> |
GetAvatarFeatureStats(...) | GetAvatarFeatureStatsAsync(...) returns UniTask<Dictionary<AvatarFeatureStat, float>> |
- Parameter order changed on wearable query methods -
forceFetchandcancellationTokenpositions have been swapped:
| Method | Old Signature | New Signature |
|---|---|---|
GetDefaultWearablesByCategoryAsync | (category, cancellationToken, forceFetch) | (category, forceFetch, cancellationToken) |
GetUserWearablesByCategoryAsync | (category, cancellationToken, forceFetch) | (category, forceFetch, cancellationToken) |
What's New
- Progressive Avatar Loading: Avatars now load progressively for a faster time-to-screen experience. A lightweight silhouette appears immediately, followed by low-resolution assets, then the full-fidelity avatar - so users see something on screen almost instantly while higher-quality assets stream in behind the scenes. This is enabled by default.
- Configurable LODs - Choose target quality via
AvatarLods:High(2048),Medium(1024), orLow(512). All load methods accept an optionalAvatarLods[]parameter to control resolution. ManagedAvatar.LoadingCompleteevent - Fires when the full-fidelity avatar is ready. Use this to trigger UI transitions or gameplay logic that depends on the avatar being fully loaded.- Note: Async load methods (e.g.,
LoadUserAvatarAsync) now return when the silhouette is ready, before the full avatar has rendered. UseLoadingCompleteor theOnLoadingCompletecallback inLoadAvatarOptionsto detect when loading is fully complete.
- Configurable LODs - Choose target quality via
- The built-in Avatar Editor has been removed from the SDK and extracted to a standalone package. See the Legacy Avatar Editor page for more information.
- It's recommended to use the Custom Avatar Editor sample which demonstrates how you can create your own Avatar Editor using API endpoints.
- New
LoadAvatarAsync<T>API: A new unified method for loading avatars with structured options:AvatarSdk.LoadAvatarAsync<T>(T options)- a single entry point supporting four load paths:LoadAvatarOptions.User- loads the authenticated user's avatarLoadAvatarOptions.ByDefinition- loads from a JSON definition stringLoadAvatarOptions.Default- loads a default fallback avatarLoadAvatarOptions.Test- loads a test avatar
- Explicit load methods like
LoadUserAvatarAsyncare considered legacy. Opt to use the generic method instead.
- Avatar Screenshot API: New
AvatarSdk.CreateAvatarScreenshotAsync()method captures a headshot PNG of any avatar:- Configurable resolution (default 512x512), transparency, MSAA, FOV, and framing
- Returns
byte[]PNG data; optionally saves to a file path on device
- Custom Colors & Facial Hair
- User custom color management - Create, update, and delete custom color presets for hair, eyebrows, and eyelashes via
CreateUserColorAsync,UpdateUserColorAsync, andDeleteUserColorAsync - Facial hair customization - Facial hair is now a distinct hair type that can be equipped and colored independently. Use
CreateFacialHairColor()to create colors for use withSetColorAsync
- User custom color management - Create, update, and delete custom color presets for hair, eyebrows, and eyelashes via
- New Wearable & Feature Categories
- Jacket and Hoodies added as distinct wearable slots as opposed to being grouped together as Outerwear.
- User categories were added for jackets, dress, skirt, and shoes to match what Genies Art Forge offers.
.Allvalue added toAvatarFeatureCategory,AvatarMakeupCategory,WearablesCategory,UserWearablesCategory,HairType, andColorTypefor querying all items at once.
- Samples Scenes Update: With the removal of the built-in Avatar Editor, the sample scenes needed to be updated to remove it.
- Creating an Avatar Editor - Full-featured replacement for the removed built-in Avatar Editor. It has improved UI and functionality from the previous version.
- Avatar Starter - Simplified to focus on basic avatar loading. Removed Avatar Editor and Cinemachine integration.
- Using Multiple Avatars - Now demonstrates 4 avatars (up from 2) and showcases
LoadAvatarByDefinitionAsyncfor loading avatars from JSON definitions.
What's Fixed
- Fixes crash from a race condition when an avatar load is interrupted mid-stream.
- Fixes hair particles flying across the screen when changing hairstyles.
- Fixes incorrect tattoo category enum mapping.
- Fixes crashes related to native material handling.
Improvements
- Inventory caching - Wearable and default inventory data is cached more aggressively, reducing redundant server calls when browsing categories.
- Dynamics scale tolerance - Hair and clothing physics now correctly handle scale changes on the avatar root, fixing artifacts when avatars are resized.
- Reduced GC overhead - Removed unnecessary garbage collection calls, reducing GC spikes during avatar animation.
Deprecations
- Several wearable and color methods deprecated - The following methods are deprecated and will be removed in a future version. Use the replacement instead:
| Deprecated Method | Replacement |
|---|---|
GetWearableAssetInfoListAsync() | GetDefaultWearablesByCategoryAsync() or GetUserWearablesByCategoryAsync() |
EquipOutfitAsync() | EquipWearableByWearableIdAsync() |
UnEquipOutfitAsync() | UnEquipWearableByWearableIdAsync() |
SetSkinColorAsync() | SetColorAsync() with CreateSkinColor() |
GetUsersAssetsAsync() | GetUserWearablesByCategoryAsync() |