アバターエディターサービスを使用すると、ゲーム内でユーザーのアバターにアクセスし、変更を加えることができます。アバターエディターサービスは、ユーザーのインベントリとマーケットプレイスにもアクセスでき、アウトフィットを保存したり、ユーザーのアカウントにアバターアイテムを購入することができます。
完全なキャラクターカスタマイズ体験のために、ゲーム内アバターエディターとともにアバターエディターサービスの実装をお勧めします。シンプルアバターエディターデモリファレンスプレイスの例を参照してください。
アバターエディターサービスを使用するには、まずアクセスリクエストをしてユーザーのインベントリへのアクセスを取得する必要があります。アクセスが正常に付与された後、以下のアクションを実行できます。
- ユーザーのインベントリを読み取ることで、ユーザーが所有しているアイテムのリストを取得します。
- マーケットプレイスを検索するために、さまざまなプロパティを使用してフィルタリングやソートを行います。
- ユーザーに購入を促すマーケットプレイスアイテムの購入を行います。
アクセスをリクエスト
ユーザーのインベントリにアクセスを開始するには、ユーザーにPromptAllowInventoryReadAccess()を通じてアクセスを許可するように促す必要があります。このリクエストは、セッションごとに1回行う必要があります。
次のコードサンプルを使用して、アクセスプロンプトを開始し、ユーザーの応答をリッスンします:
local AvatarEditorService = game:GetService("AvatarEditorService")AvatarEditorService:PromptAllowInventoryReadAccess()local result = AvatarEditorService.PromptAllowInventoryReadAccessCompleted:Wait()if result == Enum.AvatarPromptResult.Success then-- アクセスが許可されました!end
ユーザーは次のプロンプトを受け取ります:

ユーザーがプロンプトを承認すると、AvatarEditorServiceはユーザーのインベントリにアクセスを開始できます。
ユーザーのインベントリを読み取る
ユーザーによってアクセスが許可されたら、GetInventory()関数を使用してインベントリを読み取ることができます。このとき、フィルタリングするためにAvatarAssetTypesの配列を指定します。この関数は、ユーザーが所有しているアイテムを含むInventoryPagesオブジェクトを返します。
以下のコードサンプルを使用して、ユーザーのインベントリ内の特定のアクセサリーのリストを表示します:
local AvatarEditorService = game:GetService("AvatarEditorService")AvatarEditorService:PromptAllowInventoryReadAccess()local result = AvatarEditorService.PromptAllowInventoryReadAccessCompleted:Wait()if result == Enum.AvatarPromptResult.Success then-- アクセスが許可されました!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
マーケットプレイスを検索
AvatarEditorServiceには、Robloxカタログを検索するための関数とイベントが含まれています。検索するには、以下のプロパティの中から1つ以上を含むCatalogSearchParamsオブジェクトを提供します:
| プロパティ | 説明 |
|---|---|
| AssetTypes | Enum.AvatarAssetTypeの配列(例:Enum.AvatarAssetType.BackAccessory) |
| BundleTypes | Enum.BundleTypeの配列(例:Enum.BundleType.BodyParts) |
| CategoryFilter | さまざまなカタログカテゴリを説明するEnum.CatalogCategoryFilter(例:"Featured"や"Community Creations")。デフォルトではEnum.CatalogCategoryFilter.Noneに設定されています。 |
| MaxPrice | フィルタリングするための最大価格を示す整数。 |
| MinPrice | フィルタリングするための最小価格を示す整数。デフォルトでMinPriceは0です。 |
| SearchKeyword | カタログのアイテム説明に対してクエリするための文字列。 |
| SortType | 結果の並び順を説明するEnum.CatalogSortType。デフォルトではEnum.CatalogSortType.Relevanceに設定されています。 |
| IncludeOffSale | 検索結果にオフセールアイテムが含まれるかどうかを示すブーリアン。デフォルトではfalseに設定されています。 |
| CreatorId | 特定のクリエイターを指定するための整数。UserIdまたはGroupIdのいずれかを使用できます。 |
| CreatorName | 特定のクリエイターが作成したアイテムで検索するために使用する文字列。User NameまたはGroup Nameのいずれかを使用できます。 |
以下のコードサンプルは、BackおよびShoulderアセットタイプのためのCatalogSearchParamsオブジェクトを構築し、これをSearchCatalog()呼び出しに渡します:
local AvatarEditorService = game:GetService("AvatarEditorService")local catalogSearchParams = CatalogSearchParams.new()local assetTypes = {Enum.AvatarAssetType.BackAccessory,Enum.AvatarAssetType.ShoulderAccessory}catalogSearchParams.AssetTypes = assetTypeslocal pagesObject =--この関数は、結果を含むCatalogPagesオブジェクトを返します。AvatarEditorService:SearchCatalog(catalogSearchParams)local currentPage = pagesObject:GetCurrentPage()for _, item in currentPage doprint(item)end
アバターとアウトフィットの保存
ゲーム内アバターエディターと併用することで、AvatarEditorServiceはアバターアイテムとアウトフィットをRobloxプラットフォームに保存および更新できます。ユーザーは、アバターまたはアウトフィットを保存する際に、所有していないカタログアイテムは受け取りません。
HumanoidDescriptionは、PromptSaveAvatar()を使用して、ユーザーの現在のアバターに保存できます。これには、次のものが含まれます:
- 既存のカタログアイテムを使用して構築した事前定義されたアバター設定。
- ユーザーがゲーム内アバターエディターを通じて選択した設定。

AvatarEditorService:PromptSaveAvatar()はyieldしないため、AvatarEditorService.PromptSaveAvatarCompletedイベントをリッスンして結果を取得できます。
以下のコードは、PromptSaveAvatar()を使用して現在のHumanoidDescriptionを保存し、成功した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-- アバターが保存されました!end
ユーザーの現在のアバターを上書きせずに、任意のHumanoidDescriptionをアウトフィットとして保存するには、AvatarEditorService:PromptCreateOutfit()を使用します。

呼び出した後、AvatarEditorService:PromptCreateOutfit()の結果を得るには、AvatarEditorService.PromptCreateOutfitCompletedイベントをリッスンします。
以下のコードサンプルは、AvatarEditorService:PromptCreateOutfit()を使用してアウトフィットを作成し、成功した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-- アウトフィットが保存されました!end
アイテムの購入
カタログアイテムを使用したアバターまたはアウトフィットを保存する際、ユーザーは所有していないアイテムを受け取りません。アバターまたはアウトフィットを保存する前に、MarketplaceService:PlayerOwnsAsset()を使用してユーザーがそのアセットを所有しているか確認し、MarketplaceService:PromptPurchase()を使用してアイテムの購入オプションを提供します。
アイテムの購入を実装したくない場合は、代わりにユーザーがAvatarEditorService:PromptSetFavorite()を使用して非所有アイテムをお気に入りにできるようにすることができます。