Der Avatar-Editor-Dienst ermöglicht es Ihnen, auf den Avatar eines Benutzers innerhalb eines Spiels zuzugreifen und Änderungen vorzunehmen. Der Avatar-Editor-Dienst kann auch auf das Inventar eines Benutzers und den Marktplatz zugreifen, um Outfits zu speichern und Avatar-Gegenstände für das Benutzerkonto zu kaufen.
Wir empfehlen, den Avatar-Editor-Dienst mit einem In-Game-Avatar-Editor zu implementieren, um ein umfassendes Charakteranpassungserlebnis zu bieten. Siehe den Einfachen Avatar-Editor-Demo Referenzplatz für ein Beispiel für diese Funktion.
Um den Avatar-Editor-Dienst zu verwenden, müssen Sie zuerst Zugriff anfordern auf das Inventar des Benutzers. Sobald der Zugriff erfolgreich gewährt wurde, können Sie die folgenden Aktionen ausführen:
- Lesen Sie das Inventar des Benutzers, um eine Liste von Gegenständen zu erhalten, die dem Benutzer gehören.
- Durchsuchen Sie den Marktplatz, indem Sie eine Vielzahl von Eigenschaften verwenden, um zu filtern und zu sortieren.
- Statten Sie Avatar-Gegenstände aus und speichern Sie Outfits im Avatar des Benutzers.
- Fordern Sie den Benutzer auf, zu kaufen einen Marktplatzgegenstand.
Zugriff anfordern
Um auf das Inventar eines Benutzers zuzugreifen, müssen Sie den Benutzer auffordern, den Zugriff über PromptAllowInventoryReadAccess() zuzulassen. Sie müssen diese Anfrage einmal pro Sitzung ausführen.
Verwenden Sie das folgende Codebeispiel, um die Zugriffsaufforderung zu initiieren und auf die Benutzerantwort zu hören:
local AvatarEditorService = game:GetService("AvatarEditorService")AvatarEditorService:PromptAllowInventoryReadAccess()local result = AvatarEditorService.PromptAllowInventoryReadAccessCompleted:Wait()if result == Enum.AvatarPromptResult.Success then-- Zugriff gewährt!end
Der Benutzer erhält die folgende Aufforderung:

Sobald der Benutzer die Aufforderung annimmt, kann der AvatarEditorService beginnen, auf das Inventar des Benutzers zuzugreifen.
Benutzerinventar lesen
Sobald der Benutzer Zugriff gewährt hat, können Sie dessen Inventar mit der Funktion GetInventory() lesen und ein Array von AvatarAssetTypes zur Filterung bereitstellen. Diese Funktion gibt ein InventoryPages-Objekt zurück, das die vom Benutzer besessenen Gegenstände enthält.
Verwenden Sie das folgende Codebeispiel, um eine Liste spezifischer Accessoires im Inventar eines Benutzers auszugeben:
local AvatarEditorService = game:GetService("AvatarEditorService")AvatarEditorService:PromptAllowInventoryReadAccess()local result = AvatarEditorService.PromptAllowInventoryReadAccessCompleted:Wait()if result == Enum.AvatarPromptResult.Success then-- Zugriff gewährt!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
Marktplatz durchsuchen
AvatarEditorService beinhaltet Funktionen und Ereignisse, mit denen Sie im Roblox-Katalog suchen können. Um zu suchen, geben Sie Ihr Suchanfrage mit einem CatalogSearchParams-Objekt an, das eine oder mehrere der folgenden Eigenschaften enthält:
| Eigenschaft | Beschreibung |
|---|---|
| AssetTypes | Ein Array von Enum.AvatarAssetType, wie z.B. Enum.AvatarAssetType.BackAccessory. |
| BundleTypes | Ein Array von Enum.BundleType, wie z.B. Enum.BundleType.BodyParts. |
| CategoryFilter | Eine Enum.CatalogCategoryFilter, die die verschiedenen Katalogkategorien beschreibt, wie "Empfohlen" oder "Community-Kreationen". Standardmäßig ist dies auf Enum.CatalogCategoryFilter.None eingestellt. |
| MaxPrice | Eine ganze Zahl, die den maximalen Preis zum Filtern beschreibt. |
| MinPrice | Eine ganze Zahl, die den minimalen Preis zum Filtern beschreibt. Standardmäßig ist MinPrice 0. |
| SearchKeyword | Ein String, um gegen die Artikelbeschreibungen im Katalog zu suchen. |
| SortType | Ein Enum.CatalogSortType, der beschreibt, wie die Ergebnisse sortiert sind. Standardmäßig ist dies auf Enum.CatalogSortType.Relevance eingestellt. |
| IncludeOffSale | Ein Boolean, der beschreibt, ob die Suchergebnisse auch Artikel beinhalten, die nicht zum Verkauf stehen. Standardmäßig ist dies auf false eingestellt. |
| CreatorId | Eine ganze Zahl zur Angabe eines bestimmten Erstellers. Sie können entweder eine UserId oder eine GroupId verwenden. |
| CreatorName | Ein String, der verwendet wird, um nach von einem bestimmten Ersteller erstellten Artikeln zu suchen. Sie können entweder einen Benutzernamen oder einen Gruppennamen verwenden. |
Das folgende Codebeispiel erstellt ein CatalogSearchParams-Objekt für die Rücken- und Schulter-Assettypen und übergibt dieses über einen SearchCatalog()-Aufruf:
local AvatarEditorService = game:GetService("AvatarEditorService")local catalogSearchParams = CatalogSearchParams.new()local assetTypes = {Enum.AvatarAssetType.BackAccessory,Enum.AvatarAssetType.ShoulderAccessory}catalogSearchParams.AssetTypes = assetTypeslocal pagesObject =--Diese Funktion gibt ein CatalogPages-Objekt zurück, das die Ergebnisse enthält.AvatarEditorService:SearchCatalog(catalogSearchParams)local currentPage = pagesObject:GetCurrentPage()for _, item in currentPage doprint(item)end
Avatare und Outfits speichern
Wenn der AvatarEditorService zusammen mit einem In-Game-Avatar-Editor verwendet wird, kann er Avatar-Gegenstände und Outfits auf der Roblox-Plattform speichern und aktualisieren. Benutzer erhalten beim Speichern eines Avatars oder Outfits keine Katalogartikel, die sie nicht besitzen.
Jede HumanoidDescription kann mit PromptSaveAvatar() im aktuellen Avatar des Benutzers gespeichert werden. Dies kann Folgendes umfassen:
- Vorgegebene Avatar-Konfigurationen, die Sie mit vorhandenen Katalogartikeln erstellt haben.
- Jede Konfiguration, die der Benutzer über einen In-Game-Avatar-Editor ausgewählt hat.

Da AvatarEditorService:PromptSaveAvatar() nicht yieldet, können Sie das Ergebnis erhalten, indem Sie auf das Ereignis AvatarEditorService.PromptSaveAvatarCompleted hören.
Der folgende Code speichert eine aktuelle HumanoidDescription mit PromptSaveAvatar() und überprüft ein erfolgreiches Ereignis von AvatarEditorService.PromptSaveAvatarCompleted:
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 gespeichert!end
Um eine beliebige HumanoidDescription als Outfit zu speichern (ohne den aktuellen Avatar des Benutzers zu überschreiben), verwenden Sie AvatarEditorService:PromptCreateOutfit().

Sobald er aufgerufen wird, können Sie das Ergebnis von AvatarEditorService:PromptCreateOutfit() erhalten, indem Sie auf das Ereignis AvatarEditorService.PromptCreateOutfitCompleted hören.
Das folgende Codebeispiel erstellt ein Outfit mit AvatarEditorService:PromptCreateOutfit() und hört auf ein erfolgreiches Ereignis von AvatarEditorService.PromptCreateOutfitCompleted:
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-- Outfit gespeichert!end
Gegenstände kaufen
Beim Speichern eines Avatars oder eines Outfits, das Katalogartikel verwendet, erhält der Benutzer keine Gegenstände, die er nicht besitzt. Überprüfen Sie vor dem Speichern eines Avatars oder Outfits, ob der Benutzer den Vermögenswert mit MarketplaceService:PlayerOwnsAsset() besitzt, und bieten Sie ihm die Möglichkeit, den Artikel mit MarketplaceService:PromptPurchase() zu kaufen.
Wenn Sie keine Artikelkäufe implementieren möchten, können Sie stattdessen Benutzern erlauben, nicht besessene Artikel mit AvatarEditorService:PromptSetFavorite() zu favorisieren.