头像编辑服务

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

头像编辑服务让您在体验中访问并更改用户的头像。头像编辑服务还可以访问用户的库存和 市场,以保存服装和购买头像物品到用户的账户。

我们推荐在游戏中实施头像编辑服务,以实现完整的角色自定义体验。请查看 简单头像编辑演示 参考地点作为此功能的示例。

要开始使用头像编辑服务,您必须首先 请求访问 用户的库存。在成功授予访问权限后,您可以执行以下操作:

请求访问

要开始访问用户的库存,您需要提示用户通过 PromptAllowInventoryReadAccess() 允许访问。您需要在每个会话中执行此请求一次。

使用以下代码示例来启动访问提示并监听用户的响应:


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 do
print(item)
end
end

搜索市场

AvatarEditorService 包含允许您搜索 Roblox 目录的函数和事件。要搜索,请提供带有 CatalogSearchParams 对象的查询,该对象包括以下一个或多个属性:

属性描述
AssetTypes一个 Enum.AvatarAssetType 数组,如 Enum.AvatarAssetType.BackAccessory。
BundleTypes一个 Enum.BundleType 数组,如 Enum.BundleType.BodyParts。
CategoryFilter一个 Enum.CatalogCategoryFilter 描述各种目录类别,如“推荐”或“社区创作”。默认设置为 Enum.CatalogCategoryFilter.None
MaxPrice一个整数,描述要筛选的最高价格。
MinPrice一个整数,描述要筛选的最低价格。默认情况下,MinPrice 为 0
SearchKeyword一个字符串,用于在目录中的物品描述中查询。
SortType一个 Enum.CatalogSortType,描述结果的排序方式。默认设置为 Enum.CatalogSortType.Relevance
IncludeOffSale一个布尔值,描述搜索结果是否包括未出售的物品。默认设置为 false。
CreatorId一个整数,用于指定给定创建者。您可以使用用户 ID 或组 ID。
CreatorName一个字符串,用于按创建者搜索的物品。您可以使用用户名或组名。

以下代码示例构建一个 CatalogSearchParams 对象用于 背部肩部 资产类型,并通过 SearchCatalog() 调用传递该对象:


local AvatarEditorService = game:GetService("AvatarEditorService")
local catalogSearchParams = CatalogSearchParams.new()
local assetTypes = {
Enum.AvatarAssetType.BackAccessory,
Enum.AvatarAssetType.ShoulderAccessory
}
catalogSearchParams.AssetTypes = assetTypes
local pagesObject =
--此函数返回一个包含结果的 CatalogPages 对象。
AvatarEditorService:SearchCatalog(catalogSearchParams)
local currentPage = pagesObject:GetCurrentPage()
for _, item in currentPage do
print(item)
end

保存头像和服装

在与游戏内头像编辑器一起使用时,AvatarEditorService 可以将头像物品和服装保存并更新到 Roblox 平台。保存头像或服装时,用户不会收到他们未拥有的目录物品。

任何 HumanoidDescription 都可以通过 PromptSaveAvatar() 保存到用户当前的头像。这可能包括:

  • 您使用现有目录物品构建的预定义头像配置。
  • 用户通过游戏内头像编辑器选择的任何配置。

由于 AvatarEditorService:PromptSaveAvatar() 不会阻塞,您可以通过监听 AvatarEditorService.PromptSaveAvatarCompleted 事件获取结果。

以下代码将使用 PromptSaveAvatar() 保存当前的 HumanoidDescription,并检查是否成功触发 AvatarEditorService.PromptSaveAvatarCompleted 事件:


local AvatarEditorService = game:GetService("AvatarEditorService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local 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.PromptCreateOutfitCompleted 事件来获得 AvatarEditorService:PromptCreateOutfit() 的结果。

以下代码示例使用 AvatarEditorService:PromptCreateOutfit() 创建一个服装,并监听成功的 AvatarEditorService.PromptCreateOutfitCompleted 事件:


local AvatarEditorService = game:GetService("AvatarEditorService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local 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() 收藏未拥有的物品。