Usługa Edytora Awatarów pozwala na dostęp i wprowadzanie zmian w awatarze użytkownika w ramach doświadczenia. Usługa Edytora Awatarów może również uzyskać dostęp do ekwipunku użytkownika oraz do Rynku, aby zapisać stroje i kupić przedmioty dla awatara na konto użytkownika.
Zalecamy implementację Usługi Edytora Awatarów wraz z edytorem awatarów w grze, aby uzyskać pełne doświadczenie personalizacji postaci. Spójrz na Demonstrację Prostej Edycji Awatara jako przykład tej funkcji.
Aby rozpocząć korzystanie z Usługi Edytora Awatarów, musisz najpierw zażądać dostępu do ekwipunku użytkownika. Po pomyślnym przyznaniu dostępu możesz wykonać następujące akcje:
- Przeczytaj ekwipunek użytkownika, aby uzyskać listę przedmiotów posiadanych przez użytkownika.
- Wyszukaj na Rynku, używając różnych właściwości do filtrowania i sortowania.
- Wyposaż przedmioty dla awatara i zapisz stroje na awatarze użytkownika.
- Zachęć użytkownika do zakupu przedmiotu z Rynku.
Żądanie dostępu
Aby rozpocząć dostęp do ekwipunku użytkownika, musisz zachęcić użytkownika do zezwolenia na dostęp przez PromptAllowInventoryReadAccess(). Musisz wykonać to żądanie raz na sesję.
Użyj poniższego przykładu kodu, aby zainicjować prośbę o dostęp i nasłuchiwać odpowiedzi użytkownika:
local AvatarEditorService = game:GetService("AvatarEditorService")AvatarEditorService:PromptAllowInventoryReadAccess()local result = AvatarEditorService.PromptAllowInventoryReadAccessCompleted:Wait()if result == Enum.AvatarPromptResult.Success then-- Dostęp przyznany!end
Użytkownik otrzymuje następujące powiadomienie:

Po zaakceptowaniu powiadomienia przez użytkownika, AvatarEditorService może rozpocząć dostęp do ekwipunku użytkownika.
Przeczytaj ekwipunek użytkownika
Gdy dostęp zostanie przyznany przez użytkownika, możesz odczytać jego ekwipunek za pomocą funkcji GetInventory(), podając tablicę AvatarAssetTypes do filtrowania. Ta funkcja zwraca obiekt InventoryPages zawierający przedmioty posiadane przez użytkownika.
Użyj poniższego przykładu kodu, aby wydrukować listę określonych akcesoriów w ekwipunku użytkownika:
local AvatarEditorService = game:GetService("AvatarEditorService")AvatarEditorService:PromptAllowInventoryReadAccess()local result = AvatarEditorService.PromptAllowInventoryReadAccessCompleted:Wait()if result == Enum.AvatarPromptResult.Success then-- Dostęp przyznany!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
Wyszukaj na Rynku
AvatarEditorService zawiera funkcje i zdarzenia, które umożliwiają wyszukiwanie w katalogu Roblox. Aby przeprowadzić wyszukiwanie, dostarcz swoje zapytanie za pomocą obiektu CatalogSearchParams, który zawiera jedną lub więcej z poniższych właściwości:
| Właściwość | Opis |
|---|---|
| AssetTypes | Tablica Enum.AvatarAssetType takich jak Enum.AvatarAssetType.BackAccessory. |
| BundleTypes | Tablica Enum.BundleType takich jak Enum.BundleType.BodyParts. |
| CategoryFilter | Enum.CatalogCategoryFilter, opisujący różne kategorie katalogu, takie jak "Polecane" lub "Twórczość społeczności". Domyślnie ustawiono to na Enum.CatalogCategoryFilter.None |
| MaxPrice | Całkowita liczba określająca maksymalną cenę do filtrowania. |
| MinPrice | Całkowita liczba określająca minimalną cenę do filtrowania. Domyślnie, MinPrice to 0. |
| SearchKeyword | Łańcuch znaków do wyszukiwania w opisach przedmiotów w katalogu. |
| SortType | Enum.CatalogSortType, który opisuje, jak wyniki są sortowane. Domyślnie ustawiono to na Enum.CatalogSortType.Relevance. |
| IncludeOffSale | Wartość logiczna określająca, czy wyniki wyszukiwania obejmują przedmioty, które nie są w sprzedaży. Domyślnie ustawiono to na false. |
| CreatorId | Całkowita liczba, aby określić danego twórcę. Możesz użyć identyfikatora użytkownika lub identyfikatora grupy. |
| CreatorName | Łańcuch znaków używany do wyszukiwania według przedmiotów stworzonych przez danego twórcę. Możesz użyć nazwy użytkownika lub nazwy grupy. |
Poniższy przykład kodu tworzy obiekt CatalogSearchParams dla typów aktywów Plecak i Ramię, i przekazuje go przez wywołanie SearchCatalog():
local AvatarEditorService = game:GetService("AvatarEditorService")local catalogSearchParams = CatalogSearchParams.new()local assetTypes = {Enum.AvatarAssetType.BackAccessory,Enum.AvatarAssetType.ShoulderAccessory}catalogSearchParams.AssetTypes = assetTypeslocal pagesObject =--Ta funkcja zwraca obiekt CatalogPages zawierający wyniki.AvatarEditorService:SearchCatalog(catalogSearchParams)local currentPage = pagesObject:GetCurrentPage()for _, item in currentPage doprint(item)end
Zapisz awatary i stroje
Kiedy jest używana wraz z edytorem awatarów w grze, AvatarEditorService może zapisywać i aktualizować przedmioty awatara oraz stroje na platformie Roblox. Użytkownicy nie otrzymują przedmiotów katalogu, których nie posiadają podczas zapisywania awatara lub stroju.
Każdy HumanoidDescription może być zapisany na aktualnym awatarze użytkownika za pomocą PromptSaveAvatar(). Może to obejmować:
- Wstępnie zdefiniowane konfiguracje awatara, które zbudowałeś przy użyciu istniejących przedmiotów katalogu.
- Dowolna konfiguracja, którą użytkownik wybrał za pomocą edytora awatarów w grze.

Ponieważ AvatarEditorService:PromptSaveAvatar() nie zwraca wyniku, możesz uzyskać rezultat, nasłuchując zdarzenia AvatarEditorService.PromptSaveAvatarCompleted.
Poniższy kod zapisze bieżący HumanoidDescription za pomocą PromptSaveAvatar() i sprawdzi, czy zdarzenie AvatarEditorService.PromptSaveAvatarCompleted zakończyło się sukcesem:
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-- Awatar zapisany!end
Aby zapisać dowolny HumanoidDescription jako strój (bez nadpisywania aktualnego awatara użytkownika), użyj AvatarEditorService:PromptCreateOutfit().

Po wywołaniu możesz uzyskać wynik AvatarEditorService:PromptCreateOutfit() nasłuchując zdarzenia AvatarEditorService.PromptCreateOutfitCompleted.
Poniższy przykład kodu tworzy strój z użyciem AvatarEditorService:PromptCreateOutfit() i nasłuchuje na zdarzenie AvatarEditorService.PromptCreateOutfitCompleted, które zakończyło się sukcesem:
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-- Strój zapisany!end
Zakup przedmiotów
Podczas zapisywania awatara lub stroju, które używa przedmiotów katalogowych, użytkownik nie otrzymuje przedmiotów, których nie posiada. Przed zapisaniem awatara lub stroju, sprawdź, czy użytkownik posiada dany przedmiot za pomocą MarketplaceService:PlayerOwnsAsset(), a następnie daj mu możliwość zakupu przedmiotu za pomocą MarketplaceService:PromptPurchase().
Jeśli nie chcesz wdrażać zakupów przedmiotów, możesz pozwolić użytkownikom na dodawanie nieposiadanych przedmiotów do ulubionych za pomocą AvatarEditorService:PromptSetFavorite().