资产服务 是一种非复制的服务,用于处理 Roblox 网 API 相关的资产查询。
概要
方法
创建一个新的 EditableImage 。
创建一个新的、空的 EditableMesh 。
从给定的对象上传新资产到 Roblox。
- CreateAssetVersionAsync(object : Object,assetType : Enum.AssetType,assetId : number,requestParameters : Dictionary):Tuple
从给定的对象上传新版本的现有资产。
创建一个新的 EditableImage 对象,其中包含指定的图像。
返回一个由现有网格内容ID创建的新EditableMesh对象。
创建一个新的 MeshPart 与指定的网格ID和可选的质量值表。
通过给定的 templatePlaceID 克隆一个地方。
- CreatePlaceInPlayerInventoryAsync(player : Instance,placeName : string,templatePlaceID : number,description : string):number
通过给定的 templatePlaceID 复制一个地方并将其放入指定玩家的库存。
返回包含在指定包中的一组资产ID的阵列。
提供关于特定音频来源的相关元数据。
返回指定包的内容详情。
返回一个 StandardPages 对象,包含当前体验中的名称和 PlaceId 地点。
允许用户通过提示发布对话创建经验中的资产。
保存当前位置的状态。
查找符合各种搜索条件的音频资产。
属性
方法
CreateEditableImage
创建一个新的 EditableImage 。默认情况下,解析度设置为 512×512,但您可以使用方法的选项表指定不同的尺寸。
如果设备特定的可编辑内存预算已耗尽,创建失败,该方法返回 nil 。
参数
包含方法控件的选项表:
- Size – 一种 Vector2 指定图像所需宽度和高度的方法。
返回
CreateEditableMesh
创建一个新的、空的 EditableMesh 。边顶点、三角形和其属性可以动态添加到它。如果装置特定的可编辑内存预算已耗尽,创建将失败,该方法将返回 nil 。
参数
包含创建的EditableMesh选项的表。目前没有可用选项,因为 将永远是空的可编辑网格。
返回
CreateAssetAsync
从给定的对象上传新资产到 Roblox。
目前,此方法只能在本地加载的插件中使用并上传资产,而不需要先提示。
参数
要创建为资产的对象。
目前支持的类型是:
包含资产元数据的选项表:
- Name – 资产名称作为字符串。默认为 [object.Name]。
- Description – 资产的描述为字符串。默认为 "Created with AssetService:CreateAssetAsync"。
- CreatorId – 资产创建者ID作为数字。默认为登录的 Roblox Studio 用户获取插件上下文。需要用于打开云 Luau 执行上下文。
- CreatorType – Enum.AssetCreatorType 指示资产创建者类型。默认为 Enum.AssetCreatorType.User 在插件上下文中。需要用于打开云 Luau 执行上下文。
返回
如果成功,则 Enum.CreateAssetResult 和资产 ID 对如下所示。
代码示例
以下代码从可编辑的网格中创建一个网格资产。
local AssetService = game:GetService("AssetService")
local editableMesh = AssetService:CreateEditableMesh()
-- 将垂直、面和uv添加到网格
local requestParameters = {
CreatorId = 123,
CreatorType = Enum.AssetCreatorType.User,
Name = "My asset",
Description = "a good asset",
}
local ok, result, idOrUploadErr = pcall(function()
return AssetService:CreateAssetAsync(editableMesh, Enum.AssetType.Mesh, requestParameters)
end)
if not ok then
warn(`error calling CreateAssetAsync: {result}`)
elseif result == Enum.CreateAssetResult.Success then
print(`success, new asset id: {idOrUploadErr}`)
else
warn(`upload error in CreateAssetAsync: {result}, {idOrUploadErr}`)
end
CreateAssetVersionAsync
从给定的对象上传新版本的现有资产。
目前,此方法只能在本地加载的插件中使用并上传资产,而不需要先提示。
参数
要创建为资产的对象。
目前支持的类型是:
新版本的资产ID。
包含资产元数据的选项表:
- Name – 一个 string 。资产名称。默认:object.Name。
- Description – 一个 string 。资产的描述。默认值:“用 AssetService:CreateAssetAsync 创建”。
- CreatorId – A number .资产创建者的ID。默认:登录的 Roblox Studio 用户为插件上下文。需要用于打开云 Luau 执行上下文。
- CreatorType – 一个 Enum.AssetCreatorType 。资产创建者类型。默认值:在插件上下文中的 Enum.AssetCreatorType.User 。需要在开放云 Luau 执行上下文中。
返回
如果成功,则 Enum.CreateAssetResult 和资产版本号对如下所示。
代码示例
以下代码创建了新的模型资产版本。
local AssetService = game:GetService("AssetService")
local assetIdToUpdate = 321
local model = Instance.new("Model")
local requestParameters = {
CreatorId = 123,
CreatorType = Enum.AssetCreatorType.User,
}
local ok, result, versionOrUploadErr = pcall(function()
return AssetService:CreateAssetVersionAsync(model, Enum.AssetType.Model, assetIdToUpdate, requestParameters)
end)
if not ok then
warn(`error calling CreateAssetVersionAsync: {result}`)
elseif result == Enum.CreateAssetResult.Success then
print(`success, new asset version: {versionOrUploadErr}`)
else
warn(`upload error in CreateAssetVersionAsync: {result}, {versionOrUploadErr}`)
end
CreateEditableImageAsync
创建一个新的 EditableImage 对象,其中包含指定的纹理。非资产纹理ID,例如 rbxthumb:// ,是支持的。如果使用图像资产,它必须与体验的创建者相关并/或拥有,或者必须已在体验中创建。如果装置特定的可编辑内存预算已耗尽,创建将失败,该方法将返回 nil 。
查看 EditableImage 文档,了解使用此 API 时的特殊考虑。
参数
参考存储在外部或放置在地方内的资产内容,包装一个单个值的支持的 Enum.ContentSourceType 值。
包含创建 EditableImage 的选项的表。目前由于不支持通过 Size 调整大小,没有可用的选项。
返回
一个新的 EditableImage 包含提供的图像。
CreateEditableMeshAsync
返回一个从现有 EditableMesh 或网格 EditableMesh ID中创建的新对象 Content。默认情况下,从此方法创建的 EditableMesh 将固定大小,使网格数据只能修改而不能添加或删除。固定大小 EditableMesh 消耗较少的内存,应在可能的情况下优先使用。
如果设备特定的可编辑内存预算已耗尽,创建将失败,该方法将返回 nil 。
请参阅启用可编辑网格对发布体验和权限部分,了解使用此 API 时的特殊考虑。
参数
参考存储在外部或放置在地方内的资产内容,包装一个单个值的支持的 Enum.ContentSourceType 值。
包含方法控件的选项表:
- FixedSize – A bool .默认值为 true , 返回的 EditableMesh 不会允许您添加或移除边点,只能修改其值。如果需要更改网格顶ологи,设置为 false,以牺牲使用更多内存。
返回
新的 EditableMesh 实例。
CreateMeshPartAsync
这个方法创建了一个 MeshPart 与指定的 CollisionFidelity , RenderFidelity 和 FluidFidelity 。因为 MeshPart.MeshId 是只读的,这个方法是通过脚本创建任何网格ID的网格,而不需要克隆现有的 MeshPart 。如果创建失败,它会抛出错误。
参数
参考存储在外部或放置在地方内的资产内容,包装一个单个值的支持的 Enum.ContentSourceType 值。
包含方法一个或多个控件的选项表:
- CollisionFidelity – 结果部分中的 CollisionFidelity 值。默认为 Enum.CollisionFidelity.Default 如果选项缺少或 options 表是 nil 。
返回
CreatePlaceAsync
通过给定的 templatePlaceID 克隆一个地方,并返回新地方的 PlaceId,您可以使用 TeleportService 使用。克隆位置显示在位置创建者的库存中,带有给定的名称和描述。
请注意,模板位置必须通过位置设置启用模板复制。你不能使用这种方法来克隆你不拥有的地点。
不建议频繁使用此 API,尤其是如果创建的地点包含脚本,因为快速更新代码在大量地点上变得不可行。对于用户生成的世界,考虑将用户创建物序列化并保存到 DataStores 中。
参数
新地方的名称。
新地方的描述。
返回
CreatePlaceInPlayerInventoryAsync
参数
返回
GetAudioMetadataAsync
提供关于特定音频来源(艺术家、标题、时长、类型等)的相关元数据。
参数
用于检索元数据的资产或内容ID阵列。最大批量大小为30。
返回
与请求相同顺序的词典表阵列,每个词典包含其资产/内容的以下元数据:
AssetId (字符串)
Title (字符串)
Artist (字符串)
Duration (数字) 秒内
AudioType ( Enum.AudioSubType )
请注意,如果在获取请求资产的元数据时出错,例如资产ID不存在,其词典表仍然包含在返回的阵列中,但仅包含AssetId字段用于参考目的。此外,如果不能确定给定资产(也许因为它是私人音频)的 AudioType,结果词典将不包含 AudioType 条目。
代码示例
local AssetService = game:GetService("AssetService")
local SoundService = game:GetService("SoundService")
local trackIDs = {
SoundService.Sound1.SoundId,
SoundService.Sound2.SoundId,
SoundService.Sound3.SoundId,
SoundService.Sound4.SoundId,
}
local success, result = pcall(function()
return AssetService:GetAudioMetadataAsync(trackIDs)
end)
if success then
for i = 1, #trackIDs do
local contentId = "rbxassetid://" .. result[i].AssetId
if trackIDs[i] == contentId then
print(result[i].Title, "by", result[i].Artist)
else
warn("No metadata fetched for requested asset #" .. tostring(i))
end
end
end
GetBundleDetailsAsync
该函数返回指定包的内容详情。
如果包裹 ID 不存在,它会抛出 HTTP 400 (Bad Request) 。如果 bundleId 不可转换为整数,它会抛出 Unable to cast string to int64 。
参数
指定包的 ID。
返回
包含以下键值对描述指定包的详细信息的词典:
Id — 包裹 ID (与传递的 bundleId 参数相同)
Name — 包裹名称
Description — 包裹描述
BundleType — 代表 Enum.BundleType 的字符串,例如 "BodyParts" 或 "DynamicHead"
Items — 包中的项目阵列,每个都通过以下键来表示详细信息:
Id — 物品ID
Name — 项目名称
Type — 物品类型,如 "Asset" 。
代码示例
local AssetService = game:GetService("AssetService")
local BUNDLE_ID = 14
local success, result = pcall(function()
return AssetService:GetBundleDetailsAsync(BUNDLE_ID)
end)
if success then
print(result)
--[[
{
["BundleType"] = "BodyParts",
["Description"] = "The year is 5003, Battlebot 5000 must face his mightiest foe, or face becoming obsolete.",
["Id"] = 14,
["Items"] = {
[1] = {...},
[2] = {
["Id"] = 1678225030,
["Name"] = "SinisterBot 5001 Left Arm",
["Type"] = "Asset"
},
[3] = {...},
[4] = {...},
[5] = {...},
[6] = {...},
[7] = {...}
},
["Name"] = "SinisterBot 5001"
}
--]]
end
GetGamePlacesAsync
返回一个 StandardPages 对象,包含当前体验中的名称和 PlaceId 地点。
返回
代码示例
以下代码打印体验中每个地方的名称和 PlaceId 。
local AssetService = game:GetService("AssetService")
local placePages = AssetService:GetGamePlacesAsync()
while true do
for _, place in placePages:GetCurrentPage() do
print("Name:", place.Name)
print("PlaceId:", place.PlaceId)
end
if placePages.IsFinished then
break
end
placePages:AdvanceToNextPageAsync()
end
PromptCreateAssetAsync
允许用户通过提示发布对话创建经验中的资产。调用时,它向用户提供对话框,允许他们输入名称、描述和预览资产。提交后,将资产保存到用户的库存中。只能在服务器端调用。
参数
返回
如果成功,则 Enum.PromptCreateAssetResult 和资产 ID 对如下所示。
PromptImportAnimationClipFromVideoAsync
参数
返回
SavePlaceAsync
保存位置的当前状态。请记住以下指导方针和限制:
- 此方法仅适用于使用 AssetService:CreatePlaceAsync() 创建的地方或通过地方设置启用 API 的地方。
- 该方法覆盖了位置的前一个状态。要恢复保存,发布较旧版本的位置。
- 有情况下,保存可以同时在工作室和多个体验服务器发生。保存的顺序发生在它们被调用的顺序。
- 工作室中的激活团队创建会话将所有保存从发生中阻止。
参数
返回
SearchAudio
返回包含给定搜索结果的 AudioPages 对象。不会返回空值的字段。
请注意,该方法具有低 HTTP 请求限制,可能会发生错误,因此应始终包含在 pcall() 中进行错误处理。可能的错误消息包括:
<th>原因</th></tr></thead><tbody><tr><td>HTTP 429(请求过多)</td><td><code>Class.AssetService:SearchAudio()</code> 已调用过多次。</td></tr><tr><td>数据的预期类型不匹配,预期阵列为 null</td><td>关键字参数被过滤。</td></tr></tbody>
错误消息 |
---|
参数
返回
代码示例
This code gets the music assets returned by the keyword "happy" and prints out their titles.
local AssetService = game:GetService("AssetService")
local audioSearchParams = Instance.new("AudioSearchParams")
audioSearchParams.SearchKeyword = "happy"
local success, result = pcall(function()
return AssetService:SearchAudio(audioSearchParams)
end)
if success then
local currentPage = result:GetCurrentPage()
for _, audio in currentPage do
print(audio.Title)
end
else
warn("AssetService error: " .. result)
end
--[[ Returned data format
{
"AudioType": string,
"Artist": string,
"Title": string,
"Tags": {
"string"
},
"Id": number,
"IsEndorsed": boolean,
"Description": string,
"Duration": number,
"CreateTime": string,
"UpdateTime": string,
"Creator": {
"Id": number,
"Name": string,
"Type": number,
"IsVerifiedCreator": boolean
}
}
--]]