Generazione di modelli

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

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:

  1. Scarica il file Behaviors.rbxm.

  2. 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.

  3. 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 ServerScriptService

    local GenerationService = game:GetService("GenerationService")
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    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
    local targetSize = 16
    local 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 comportamentale
    local 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 mondo
    functionalModel:PivotTo(CFrame.new(0, functionalModel:GetExtentsSize().Y / 2, -40))
    functionalModel.Name = "GenerazioneAutoDragoBasilare"
    functionalModel.Parent = Workspace
    else
    warn(result)
    end
© 2026 Roblox Corporation. Roblox, il logo Roblox e Powering Imagination sono tra i nostri marchi registrati e non registrati negli Stati Uniti. e altri paesi.