GenerationService
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
adalah layanan yang memungkinkan pengembang untuk menghasilkan objek 3D dari prompt teks menggunakan model dasar 3D Cube Roblox .
Pembuatan mesh adalah proses dua langkah:
- GenerateMeshAsync() memulai proses generasi mesh menggunakan prompt teks dan parameter lain yang diperlukan.Ini mengembalikan identifikator unik (ID generasi) yang dapat digunakan untuk mengambil hasil masa depan.
- LoadGeneratedMeshAsync() memuat mesh yang dihasilkan ke dalam pengalaman. Mesh dikembalikan sebagai MeshPart yang berisi EditableMesh.
Saat ini, GenerationService hanya mendukung penggunaan berikut:
- GenerateMeshAsync() harus dipanggil dari skrip server.
- LoadGeneratedMeshAsync() harus dipanggil dari skrip klien.
Sebagai hasilnya, ketika permintaan generasi mesh berasal dari klien, klien harus mengirim sinyal ke server untuk memulai generasi.Setelah server menentukan bahwa generasi tersebut selesai, ia harus memberi tahu klien yang tepat untuk memanggil LoadGeneratedMeshAsync() dan mengambil mesh.Perhatikan bahwa karena mesh yang dihasilkan dimuat dengan konten EditableMesh dan hanya pada klien, tidak dipindahkan ke klien lain.
Kode berikut menunjukkan pola desain ini.Lihat pengalaman demo ini untuk contoh yang lebih terperinci.Klik tombol ⋯ dan Edit di Studio .
Contoh Kode
Adds server-side functionality to handle mesh generation requests from clients.
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.
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")
Rangkuman
Metode
- GenerateMeshAsync(inputs : Dictionary,player : Player,options : Dictionary,intermediateResultCallback : function?):Tuple
Memulai generasi mesh 3D baru dari prompt teks dan mengembalikan ID unik yang digunakan untuk melacak dan memulihkan hasil.Setelah generasi selesai, gunakan LoadGeneratedMeshAsync() untuk memuat dan menampilkan mesh yang dihasilkan.
Mengambil dan memuat mesh yang dihasilkan oleh GenerationService:GenerateMeshAsync() menggunakan generationId yang disediakan. Mesh dikembalikan sebagai MeshPart dengan konten EditableMesh.
Properti
Metode
GenerateMeshAsync
Memulai generasi mesh 3D baru dari prompt teks dan mengembalikan ID unik yang digunakan untuk melacak dan memulihkan hasil.Anda dapat secara opsional menerima hasil antara, seperti mesh tanpa teks, dengan menyediakan fungsi intermediateResultCallback.Setelah generasi selesai, gunakan LoadGeneratedMeshAsync() untuk memuat dan menampilkan mesh yang dihasilkan.
Batas tingkat Ada batas tingkat 5 generasi per menit per pengalaman.Jika Anda melebihi batas ini, permintaan generasi berikutnya diblokir sampai menit berikutnya.
Kode kesalahan | Kesalahan | Deskripsi | Tindakan pengembang yang direkomendasikan | | ------------------------ | ------------------------------------------------------------------------------------ | | Batas tingkat melebihi | Jumlah maksimum generasi mesh telah melebihi untuk menit.| Tunggu sampai batas tingkat direset. | | Kegagalan moderasi | Pembuatan mesh ditandai untuk moderasi.| tinjau dan modifikasi prompt untuk memastikan sesuai dengan panduan moderasi Roblox.| | Kesalahan server internal | Terjadi masalah tak terduga di server.| Coba ulang permintaan nanti atau periksa status server untuk masalah.| | Batas karakter melebihi | Panjang prompt masuk untuk permintaan generasi ini melebihi batas.| Kurangi jumlah karakter dalam string Prompt dari input kamus. |
Parameter
Kamus yang berisi perintah pembuatan mesh.Saat ini, satu-satunya kunci yang didukung adalah Prompt (string) yang menggambarkan mesh untuk dihasilkan.
Opsi generasi tambahan. Saat ini, tidak ada opsi yang didukung.
Fungsi panggil balas terpicu dengan hasil pembuatan menengah. Berguna untuk mengambil versi mesh awal (sebelum teks diterapkan).
Memberikan nilai
Sebuah tuple dari ID generasi dan ID konteks.
- ID Generasi: ID unik dikembalikan untuk setiap panggilan GenerateMeshAsync() .
- ID Konteks: Tidak saat ini digunakan.
Contoh Kode
Simple example showing how to use GenerateMeshAsync() to generate a mesh from a prompt.
local generationId, contextId = GenerationService:GenerateMeshAsync({["Prompt"] = "toaster"}, player, {})
Example showing how to use GenerateMeshAsync() with a callback for intermediate results.
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().
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
Mengambil dan memuat mesh yang dihasilkan oleh GenerationService:GenerateMeshAsync() menggunakan generationId yang disediakan.Mesh dikembalikan sebagai MeshPart dengan konten EditableMesh.Karena meshes yang dapat diedit tidak direplikasi, mesh yang dimuat tidak direplikasi ke klien lain dan hanya dapat dimuat sekali per generationId .
Parameter
ID unik yang dikembalikan oleh GenerateMeshAsync() . Mengidentifikasi mesh untuk load.
Memberikan nilai
Mesh yang dihasilkan, dikembalikan sebagai MeshPart berisi EditableMesh .
Contoh Kode
Example showing how to load a generated mesh using LoadGeneratedMeshAsync().
-- Take your generation ID generated on the server and load your generation
local mesh = GenerationService:LoadGeneratedMeshAsync(generationId)
mesh.Parent = workspace