Le Service d'Éditeur d'Avatar vous permet d'accéder et de modifier l'avatar d'un utilisateur dans un jeu. Le Service d'Éditeur d'Avatar peut également accéder à l'inventaire d'un utilisateur et au Marché pour sauvegarder des tenues et acheter des éléments d'avatar pour le compte de l'utilisateur.
Nous vous recommandons de mettre en œuvre le Service d'Éditeur d'Avatar avec un éditeur d'avatar dans le jeu pour une expérience de personnalisation complète du personnage. Consultez le Démonstration Simple de l'Éditeur d'Avatar comme exemple de cette fonctionnalité.
Pour commencer à utiliser le Service d'Éditeur d'Avatar, vous devez d'abord demander l'accès à l'inventaire de l'utilisateur. Une fois l'accès accordé avec succès, vous pouvez effectuer les actions suivantes :
- Lire l'inventaire de l'utilisateur pour obtenir une liste des objets possédés par l'utilisateur.
- Rechercher sur le Marché, en utilisant une variété de propriétés pour filtrer et trier.
- Équiper des éléments d'avatar et sauvegarder des tenues sur l'avatar de l'utilisateur.
- Inviter l'utilisateur à acheter un élément du Marché.
Demander l'accès
Pour commencer à accéder à l'inventaire d'un utilisateur, vous devez inviter l'utilisateur à permettre l'accès via PromptAllowInventoryReadAccess(). Vous devez effectuer cette demande une fois par session.
Utilisez l'exemple de code suivant pour initier l'invite d'accès et écouter la réponse de l'utilisateur :
local AvatarEditorService = game:GetService("AvatarEditorService")AvatarEditorService:PromptAllowInventoryReadAccess()local result = AvatarEditorService.PromptAllowInventoryReadAccessCompleted:Wait()if result == Enum.AvatarPromptResult.Success then-- Accès accordé !end
L'utilisateur reçoit l'invite suivante :

Une fois que l'utilisateur accepte l'invite, AvatarEditorService peut commencer à accéder à l'inventaire de l'utilisateur.
Lire l'inventaire de l'utilisateur
Une fois l'accès accordé par l'utilisateur, vous pouvez lire son inventaire avec la fonction GetInventory(), en fournissant un tableau de AvatarAssetTypes pour filtrer. Cette fonction retourne un objet InventoryPages contenant les objets possédés par l'utilisateur.
Utilisez l'exemple de code suivant pour imprimer une liste d'accessoires spécifiques dans l'inventaire de l'utilisateur :
local AvatarEditorService = game:GetService("AvatarEditorService")AvatarEditorService:PromptAllowInventoryReadAccess()local result = AvatarEditorService.PromptAllowInventoryReadAccessCompleted:Wait()if result == Enum.AvatarPromptResult.Success then-- Accès accordé !local assetTypes = {Enum.AvatarAssetType.BackAccessory,Enum.AvatarAssetType.ShoulderAccessory,Enum.AvatarAssetType.WaistAccessory}local pagesObject = AvatarEditorService:GetInventory(assetTypes)local currentPage = pagesObject:GetCurrentPage()for _, item in currentPage doprint(item)endend
Rechercher sur le Marché
AvatarEditorService inclut des fonctions et des événements qui vous permettent de rechercher dans le catalogue Roblox. Pour rechercher, fournissez votre requête avec un objet CatalogSearchParams qui inclut une ou plusieurs des propriétés suivantes :
| Propriété | Description |
|---|---|
| AssetTypes | Un tableau de Enum.AvatarAssetType tel que Enum.AvatarAssetType.BackAccessory. |
| BundleTypes | Un tableau de Enum.BundleType tel que Enum.BundleType.BodyParts. |
| CategoryFilter | Un Enum.CatalogCategoryFilter décrivant les différentes catégories du catalogue comme "Vedettes" ou "Créations de la Communauté". Par défaut, cela est défini sur Enum.CatalogCategoryFilter.None. |
| MaxPrice | Un entier décrivant le prix maximum pour le filtrage. |
| MinPrice | Un entier décrivant le prix minimum pour le filtrage. Par défaut, MinPrice est 0. |
| SearchKeyword | Une chaîne à interroger contre les descriptions des articles dans le catalogue. |
| SortType | Un Enum.CatalogSortType qui décrit comment les résultats sont ordonnés. Par défaut, cela est défini sur Enum.CatalogSortType.Relevance. |
| IncludeOffSale | Un booléen décrivant si les résultats de la recherche incluent des articles hors vente. Par défaut, cela est défini sur faux. |
| CreatorId | Un entier pour spécifier un créateur donné. Vous pouvez utiliser soit un UserId soit un GroupId. |
| CreatorName | Une chaîne utilisée pour rechercher des articles créés par un créateur donné. Vous pouvez utiliser soit un Nom d'Utilisateur soit un Nom de Groupe. |
L'exemple de code suivant construit un objet CatalogSearchParams pour les types d'actifs Back et Shoulder, et le passe à un appel SearchCatalog() :
local AvatarEditorService = game:GetService("AvatarEditorService")local catalogSearchParams = CatalogSearchParams.new()local assetTypes = {Enum.AvatarAssetType.BackAccessory,Enum.AvatarAssetType.ShoulderAccessory}catalogSearchParams.AssetTypes = assetTypeslocal pagesObject =--Cette fonction retourne un objet CatalogPages contenant les résultats.AvatarEditorService:SearchCatalog(catalogSearchParams)local currentPage = pagesObject:GetCurrentPage()for _, item in currentPage doprint(item)end
Sauvegarder des avatars et des tenues
Utilisé avec un éditeur d'avatar dans le jeu, AvatarEditorService peut sauvegarder et mettre à jour les éléments d'avatar et les tenues sur la plateforme Roblox. Les utilisateurs ne reçoivent pas les articles du catalogue qu'ils ne possèdent pas lorsqu'ils sauvegardent un avatar ou une tenue.
Toute HumanoidDescription peut être sauvegardée sur l'avatar actuel de l'utilisateur avec PromptSaveAvatar(). Cela peut inclure :
- Des configurations d'avatar prédéfinies que vous avez créées en utilisant des articles du catalogue existants.
- Toute configuration choisie par l'utilisateur via un éditeur d'avatar dans le jeu.

Puisque AvatarEditorService:PromptSaveAvatar() ne produit pas de résultat, vous pouvez obtenir le résultat en écoutant l'événement AvatarEditorService.PromptSaveAvatarCompleted.
Le code suivant sauvegardera une HumanoidDescription actuelle en utilisant PromptSaveAvatar() et vérifie un événement AvatarEditorService.PromptSaveAvatarCompleted réussi :
local AvatarEditorService = game:GetService("AvatarEditorService")local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Character or player.CharacterAdded:Wait()local humanoid = character:WaitForChild("Humanoid")local currentDescription = humanoid:GetAppliedDescription()AvatarEditorService:PromptSaveAvatar(currentDescription, humanoid.RigType)local result = AvatarEditorService.PromptSaveAvatarCompleted:Wait()if result == Enum.AvatarPromptResult.Success then-- Avatar sauvegardé !end
Pour sauvegarder toute HumanoidDescription en tant que tenue (sans écraser l'avatar actuel de l'utilisateur), utilisez AvatarEditorService:PromptCreateOutfit().

Une fois appelé, vous pouvez obtenir le résultat de AvatarEditorService:PromptCreateOutfit() en écoutant l'événement AvatarEditorService.PromptCreateOutfitCompleted.
L'exemple de code suivant crée une tenue avec AvatarEditorService:PromptCreateOutfit() et écoute un événement AvatarEditorService.PromptCreateOutfitCompleted réussi :
local AvatarEditorService = game:GetService("AvatarEditorService")local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Character or player.CharacterAdded:Wait()local humanoid = character:WaitForChild("Humanoid")local currentDescription = humanoid:GetAppliedDescription()AvatarEditorService:PromptCreateOutfit(currentDescription, humanoid.RigType)local result = AvatarEditorService.PromptCreateOutfitCompleted:Wait()if result == Enum.AvatarPromptResult.Success then-- Tenue sauvegardée !end
Acheter des articles
Lors de la sauvegarde d'un avatar ou d'une tenue utilisant des articles du catalogue, l'utilisateur ne reçoit aucun article qu'il ne possède pas. Avant de sauvegarder un avatar ou une tenue, vérifiez si l'utilisateur possède l'actif avec MarketplaceService:PlayerOwnsAsset() et offrez-lui une option pour acheter l'article avec MarketplaceService:PromptPurchase().
Si vous ne souhaitez pas mettre en œuvre les achats d'articles, vous pouvez plutôt permettre aux utilisateurs de marquer les articles non possédés comme favoris avec AvatarEditorService:PromptSetFavorite().