通过游戏内资产创建功能,您可以让用户将他们在游戏中创建的作品保存到他们的库存中。您的用户可以像使用其他任何资产一样使用这些游戏内创作。此外,这些创作在 Roblox 平台上展示时会归属您的游戏,因此任何用户都可以使用归属链接访问您的游戏并创建自己的作品。
例如,您可以允许用户在游戏中创建自定义生物作为宠物,并允许他们将最喜欢的宠物保存到他们的库存中。您可以完全控制用户可以在您的游戏中修改和保存哪些对象。用户可以在他们的个人资料上展示他们的创作,并标明归属您的游戏,从而提升您游戏的知名度。
支持的资产类型和限制
与平台上的所有资产一样,游戏内创作要遵守 资产审核。目前,您只能允许用户从您的游戏中创建 包裹。这些包裹不能包含任何脚本或私有资产,例如音频、视频和嵌套包裹。如果系统检测到可供用户保存的包裹中含有脚本或私有资产,则会通过隐藏保存提示,阻止游戏内保存操作。
当您正在运行或测试您的游戏并将脚本或私有资产作为游戏内创作的一部分添加时,保存将失败并向 Studio 输出窗口 或 开发者控制台 提示错误消息。
启用游戏内资产创建
要为用户启用游戏内资产创建,请在服务器端脚本中使用 AssetService:PromptCreateAssetAsync() API 方法,以及其他创建逻辑。指定您希望启用此功能的游戏中的哪些实例,为调用该方法设置自定义触发器(例如 UI 图标),并监听客户端远程事件以保存资产。
AssetService:PromptCreateAssetAsync() 接受以下参数:
- 一个表示提交资产创建的用户的 Player 对象。
- 一个表示资产创建的 Instance 对象。
- 当前仅限于 Enum.AssetType.Model 的 Enum.AssetType。
当服务器调用 AssetService:PromptCreateAssetAsync() 时,它会在客户端提示 提交包裹 对话框,以便触发保存操作的用户可以输入包裹的名称和描述。Roblox 提供了对话框 UI,因为保存工作流程是平台级功能。
以下示例服务器端脚本提示用户保存他们在游戏中绘制的汽车:
-- 定义 AssetService 变量
local AssetService = game:GetService("AssetService")
-- 设置 PromptCreateAssetAsync() 以提示提交对话框
local function CreateAsset(player, instance)
local complete, result, assetId = pcall(function()
return AssetService:PromptCreateAssetAsync(player, instance, Enum.AssetType.Model)
end)
if complete then
if result == Enum.PromptCreateAssetResult.Success then
print("成功上传,AssetId:", assetId)
else
print("收到结果", result)
end
else
print("错误")
print(result)
end
end
-- 汽车上色逻辑省略
-- 添加事件处理程序
local function onUserPublish(player, promptObject)
-- 用户以游戏的默认颜色保存汽车实例
if promptObject.Name == "car" then
CreateAsset(player, car)
elseif promptObject.Name == "CarPaintYellow" or promptObject.Name == "CarPaintBlue" or promptObject.Name == "CarPaintBlack" or promptObject.Name == "CarPaintRed" then
PaintCarColor(promptObject.Name)
end
end
PublishEvent.OnServerEvent:Connect(onUserPublish)体验内创作演示竞技场 展示了您如何使用此功能的示例。您可以加入演示,作为用户体验游戏内创作工作流程,或在 Studio 中编辑该地点以引用设计。
创建后和归属
用户从您的游戏中创建和保存资产后,可以在以下地方找到它:
当用户在朋友的个人资料或库存中看到游戏内创作时,他们会看到该资产创建的原始游戏的归属。用户可以单击归属链接重定向到游戏页面,以便他们可以加入游戏并创建自己的作品。