Attraverso prompt testuali e schemi predefiniti, tu (e i giocatori in gioco) potete generare sia asset 3D statici che modelli completamente funzionali come veicoli che guidano, aerei che volano e armi che sparano. Questa guida dimostra come utilizzare GenerateModelAsync() come parte di un'esperienza creativa dinamica e guidata dai giocatori.
Panoramica
GenerateModelAsync() consente la generazione di geometrie multi-mesh con i seguenti vantaggi:
- Lo schema fornito definisce come la geometria generata verrà suddivisa in parti.
- Qualsiasi oggetto generato in gioco sarà replicato e visibile a tutti i giocatori, consentendo loro di costruire insieme in tempo reale.
- I mesh generati sono di maggiore fedeltà con forme complessive migliori, silhouette, più dettagli e meno artefatti. Le texture generate sono più coese e dettagliate, con meno granulosità e illuminazione a incasso meno pronunciata.
- I tempi di generazione hanno una latenza più bassa, consentendo una creazione più rapida e reattiva nei giochi.
- Tu e persino i giocatori durante il gioco potete specificare le scatole di delimitazione per suggerire la dimensione e le proporzioni del modello generato.
- Un numero massimo opzionale di triangoli mantiene gli oggetti generati performanti per il vostro gioco.
Generazione basata su schema
Per creare oggetti articolati e funzionali, la geometria generata deve essere separata in più MeshParts. Ad esempio, per creare un'auto guidabile con ruote che girano e sterzano, sono necessari almeno cinque MeshParts: uno per il corpo dell'auto e quattro per ciascuna delle ruote dell'auto. GenerateModelAsync() raggiunge questo attraverso uno schema che elenca le parti da generare, come mostrato nel seguente frammento di codice:
Script in ServerScriptService
local GenerationService = game:GetService("GenerationService")
local Workspace = game:GetService("Workspace")
-- Imposta gli input per la geometria generata
local inputs = {
TextPrompt = "auto drago verde con 4 ruote"
}
-- Imposta lo schema sul telaio di auto a cinque modelli predefiniti
local schema = {
PredefinedSchema = "Car5"
}
-- Effettua la chiamata per generare il modello
local success, result, metadata = pcall(function()
return GenerationService:GenerateModelAsync(inputs, schema)
end)
if success then
-- Scala il modello alla dimensione target e posizionalo vicino al centro del mondo
local targetSize = 16
local modelSize = result:GetExtentsSize()
local scaleFactor = targetSize / math.max(modelSize.X, modelSize.Y, modelSize.Z)
result:ScaleTo(scaleFactor)
result:PivotTo(CFrame.new(0, result:GetExtentsSize().Y / 2, -40))
-- Ancorare tutte le parti affinché i mesh non si disassemblino
for _, descendant in result:GetDescendants() do
if descendant:IsA("BasePart") then
descendant.Anchored = true
end
end
-- Nomina il modello e genitore a Workspace
result.Name = "GenerazioneAutoDragoBasilare"
result.Parent = Workspace
else
warn(result)
end
L'immagine seguente mostra l'output atteso e la sua costruzione come appare nella gerarchia Explorer:


Script riadattabili
In Roblox, i comportamenti tipicamente comprendono gli script, gli allegati, i vincoli e altri tipi di istanza attaccati a geometrie statiche testurizzate per renderle funzionali. Poiché GenerateModelAsync() genera una vasta gamma di geometrie al volo, script riadattabili devono essere allegati per adattare automaticamente i comportamenti alla funzionalità attesa.
Ad esempio, considera un gioco in cui i giocatori possono creare le proprie auto guidabili. GenerateModelAsync() prende il prompt del giocatore e genera cinque mesh distinte (corpo e quattro ruote) attraverso lo schema Car5 schema. Poi, uno script predefinito riadattabile adatta il suo comportamento di guida alle dimensioni e alla forma del modello per garantire che l'auto sia guidabile e che le sue ruote girino in modo realistico.
Per testare gli script riadattabili:
Scarica il file Behaviors.rbxm.
Nella gerarchia Explorer di Studio, fai clic destro su ReplicatedStorage, seleziona Inserisci ⟩ Importa Modello Roblox, e scegli il file scaricato. Il modello si scompone in diverse cartelle.

Copia e incolla uno dei seguenti frammenti di codice in uno Script server all'interno di ServerScriptService, a seconda del tipo di oggetto che desideri generare.
Questo esempio genera un'auto funzionale con freno, nitro boost, effetti audio e visivi, e un contachilometri UI sullo schermo.
Script in ServerScriptServicelocal GenerationService = game:GetService("GenerationService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local Workspace = game:GetService("Workspace")-- Imposta gli input per la geometria generatalocal inputs = {TextPrompt = "auto drago verde con 4 ruote"}-- Imposta lo schema sul telaio di auto a cinque modelli predefinitilocal schema = {PredefinedSchema = "Car5"}-- Effettua la chiamata per generare il modellolocal success, result, metadata = pcall(function()return GenerationService:GenerateModelAsync(inputs, schema)end)if success then-- Scala il modello alla dimensione targetlocal targetSize = 16local modelSize = result:GetExtentsSize()local scaleFactor = targetSize / math.max(modelSize.X, modelSize.Y, modelSize.Z)result:ScaleTo(scaleFactor)-- Carica il modulo "makeFunctional" per "CarBehavior"local makeFunctional = require(ReplicatedStorage.Behaviors.CarBehavior.makeFunctional)-- Riferimenti alle parti dell'auto per nome garantiti dallo schema "Car5"local body = result:FindFirstChild("body")local frontLeftWheel = result:FindFirstChild("front left wheel")local frontRightWheel = result:FindFirstChild("front right wheel")local rearLeftWheel = result:FindFirstChild("rear left wheel")local rearRightWheel = result:FindFirstChild("rear right wheel")-- Imposta i parametri di configurazione comportamentalelocal config = {seatPosition = "inside",invisibleWhenSeated = false}-- Attacca il comportamento tramite lo script "makeFunctional"local functionalModel = makeFunctional(result, frontLeftWheel, frontRightWheel, rearLeftWheel, rearRightWheel, body, config)-- Posiziona il modello vicino al centro del mondofunctionalModel:PivotTo(CFrame.new(0, functionalModel:GetExtentsSize().Y / 2, -40))functionalModel.Name = "GenerazioneAutoDragoBasilare"functionalModel.Parent = Workspaceelsewarn(result)end