GenerationService

显示已弃用

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

无法创建
服务

GenerationService 是一种服务,允许开发人员使用 Roblox 的 Cube 3D 基础模型 生成 3D 对象。

网格生成是两步过程:

  1. GenerateMeshAsync() 使用文本提示和其他必需参数启动 mesh 生成过程。它返回一个唯一标识符 (生成 ID),可用于检索未来的结果。
  2. LoadGeneratedMeshAsync() 将生成的网格加载到体验中。网格返回为一个包含 MeshPartEditableMesh

目前,生成服务仅支持以下使用:

因结果,当网格生成请求来自客户端时,客户端必须向服务器发送信号以启动生成。一旦服务器确定该生成已完成,它应该通知适当的客户端调用 LoadGeneratedMeshAsync() 并获取网格。请注意,由于生成的网格包含 EditableMesh 内容,仅在客户端加载,因此不会复制到任何其他客户端。

以下代码展示了这个设计模式。查看这个演示体验以获取更详细的示例。点击 按钮和 在工作室编辑

代码示例

Adds server-side functionality to handle mesh generation requests from clients.

Server-side mesh generation

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local GenerationService = game:GetService("GenerationService")
-- Create a RemoteEvent for client-server communication
local meshGenerationEvent = Instance.new("RemoteEvent")
meshGenerationEvent.Name = "MeshGenerationEvent"
meshGenerationEvent.Parent = ReplicatedStorage
-- Event to send generation results back to clients
local generationResultEvent = Instance.new("RemoteEvent")
generationResultEvent.Name = "GenerationResultEvent"
generationResultEvent.Parent = ReplicatedStorage
-- Handle mesh generation requests from clients
meshGenerationEvent.OnServerEvent:Connect(function(player, prompt)
print("Generating mesh for player", player.Name, "with prompt:", prompt)
-- Generate the mesh on the server
local success, generationId, contextId = pcall(function()
return GenerationService:GenerateMeshAsync(
{["Prompt"] = prompt},
player,
{},
function(intermediateType, intermediateGenerationId, intermediateContextId)
-- Send intermediate result to the requesting client
generationResultEvent:FireClient(
player,
intermediateGenerationId,
true -- isIntermediate
)
end
)
end)
if success then
-- Send the final generation ID to the client
generationResultEvent:FireClient(player, generationId, false)
print("Successfully generated mesh with ID:", generationId)
else
-- Notify the client of failure
generationResultEvent:FireClient(player, nil, false)
warn("Failed to generate mesh:", generationId)
end
end)

Adds client-side functionality to request mesh generation from the server and display the results.

Client-side mesh generation

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local GenerationService = game:GetService("GenerationService")
local Players = game:GetService("Players")
-- Connect to the RemoteEvents
local meshGenerationEvent = ReplicatedStorage:WaitForChild("MeshGenerationEvent")
local generationResultEvent = ReplicatedStorage:WaitForChild("GenerationResultEvent")
-- Local player
local player = Players.LocalPlayer
-- Store generated meshes
local generatedMeshes = {}
-- Function to request mesh generation
local function requestMeshGeneration(prompt)
print("Requesting mesh generation for prompt: " .. prompt)
meshGenerationEvent:FireServer(prompt)
end
-- Handle generation results from the server
generationResultEvent.OnClientEvent:Connect(function(generationId, isIntermediate)
if not generationId then
print("Generation failed")
return
end
print(isIntermediate and "Loading intermediate result..." or "Loading final result...")
local mesh = GenerationService:LoadGeneratedMeshAsync(generationId)
if mesh then
-- Clean up previous mesh if it exists
if generatedMeshes[isIntermediate and "intermediate" or "final"] then
generatedMeshes[isIntermediate and "intermediate" or "final"]:Destroy()
end
mesh.Parent = workspace
-- Position the mesh in front of the player
local character = player.Character
if character and character:FindFirstChild("HumanoidRootPart") then
local rootPart = character.HumanoidRootPart
mesh:PivotTo(rootPart.CFrame * CFrame.new(0, 0, -10))
end
-- Store the mesh for cleanup
generatedMeshes[isIntermediate and "intermediate" or "final"] = mesh
print(isIntermediate and "Loaded intermediate result" or "Loaded final result")
else
print("Failed to load mesh")
end
end)
-- Example usage
requestMeshGeneration("toy robot")

概要

方法

属性

方法

GenerateMeshAsync

暂停

从文本提示开始生成新的 3D 网格,并返回用于跟踪和检索结果的独特 ID。您可以选择接收中间结果,例如未经处理的网格,通过提供 intermediateResultCallback 函数来实现。生成完成后,使用 LoadGeneratedMeshAsync() 加载并显示生成的网格。

速率限制 每个体验每分钟的速率限制为 5 代。如果您超过此限制,下一分钟之后的生成请求将被阻止。

错误代码 | 错误 | 描述 | 推荐开发者行动 | | ------------------------ | ------------------------------------------------------------------------------------ | | 超过了网格生成上限 | 最大网格生成数已超过一分钟。| 等待速度限制重置。 | | 审核失败 | 网格生成被标记为审核。| 查看并修改提示以确保它符合 Roblox 的审核准则。| | 内部服务器错误 | 服务器发生了意外问题。 | 稍后重试请求或检查服务器状态以确认问题。| | 超出了字符限制 | 这一代请求的输入提示长度超过了限制。|减少词典 字符串中的字符数。 |

参数

inputs: Dictionary

包含网格生成提示的词典。目前,唯一支持的键是描述要生成的网格的 Prompt (字符串)。

默认值:""
player: Player

要求生成的 Player 请求。

默认值:""
options: Dictionary

额外的生成选项。目前没有选项被支持。

默认值:""
intermediateResultCallback: function

一个回调函数触发与中间生成结果,用于检索早期网格版本(例如,在应用纹理之前)。

默认值:""

返回

一组生成 ID 和上下文 ID。

  • 生成ID:每次调用 GenerateMeshAsync() 返回的独特ID。
  • 上下文ID:目前不使用。

代码示例

Simple example showing how to use GenerateMeshAsync() to generate a mesh from a prompt.

Basic usage

local generationId, contextId = GenerationService:GenerateMeshAsync({["Prompt"] = "toaster"}, player, {})

Example showing how to use GenerateMeshAsync() with a callback for intermediate results.

Intermediate results callback

local generationId, contextId = GenerationService:GenerateMeshAsync({["Prompt"] = prompt}, player, {}, function(intermediateType, generationId, contextId)
-- Add your logic here
end)

Example showing how to handle errors when generating meshes with GenerateMeshAsync().

Server-side generation with error handling

local success, generationIdOrError, contextId = pcall(function()
return GenerationService:GenerateMeshAsync(
{["Prompt"] = "robot toy"},
player,
{},
function(intermediateType, intermediateId, intermediateContextId)
-- Notify client about intermediate result
generationResultEvent:FireClient(player, intermediateId, true)
end
)
end)
-- Handle a specific error code
if generationIdOrError == "Rate limit exceeded" then
-- Wait for the rate limit to reset
elseif success then
-- Send the final generation ID to the client
generationResultEvent:FireClient(player, generationIdOrError, false)
end

LoadGeneratedMeshAsync

暂停

使用提供的 generationId 检索并加载由 GenerationService:GenerateMeshAsync() 生成的网格。网格返回为 MeshPart 内容的 EditableMesh 。因为可编辑的网格不会复制,加载的网格不会复制到任何其他客户端,只能一次加载每generationId次。

参数

generationId: string

GenerateMeshAsync() 返回的唯一ID。识别要加载的网格。

默认值:""

返回

生成的网格,返回为 MeshPart 包含一个 EditableMesh

代码示例

Example showing how to load a generated mesh using LoadGeneratedMeshAsync().

LoadGeneratedMeshAsync - Load generated mesh

-- Take your generation ID generated on the server and load your generation
local mesh = GenerationService:LoadGeneratedMeshAsync(generationId)
mesh.Parent = workspace

活动