Durch Textaufforderungen und vordefinierte Schemata können Sie (und Spieler im Spiel) sowohl statische 3D-Assets als auch vollständig funktionale Modelle erzeugen, wie beispielsweise Fahrzeuge, die fahren, Flugzeuge, die fliegen, und Waffen, die schießen. Dieser Leitfaden zeigt, wie Sie GenerateModelAsync() als Teil eines dynamischen, spielergetriebenen kreativen Erlebnisses verwenden können.
Übersicht
GenerateModelAsync() ermöglicht die Erstellung von Multi-Mesh-Geometrien mit den folgenden Vorteilen:
- Das bereitgestellte Schema definiert, wie die generierte Geometrie in Teile zerlegt wird.
- Jedes im Spiel generierte Objekt wird repliziert und ist für alle Spieler sichtbar, wodurch sie in Echtzeit gemeinsam bauen können.
- Generierte Meshes haben eine höhere Wiedergabetreue mit besseren Gesamtformen, Silhouetten, mehr Details und weniger Artefakten. Generierte Texturen sind kohärenter und detaillierter, mit weniger Körnigkeit und weniger ausgeprägter gebackener Beleuchtung.
- Die Generierungszeiten haben eine niedrigere Latenz und ermöglichen eine schnellere und responsivere Erstellung in Spielen.
- Sie und sogar Spieler während des Spiels können Begrenzungsrahmen festlegen, um die Größe und Proportionen des generierten Modells zu suggerieren.
- Eine optionale maximale Dreiecksanzahl sorgt dafür, dass die generierten Objekte leistungsfähig für Ihr Spiel sind.
Schema-basierte Generierung
Um artikulierte, funktionale Objekte zu erstellen, muss die generierte Geometrie in mehrere MeshParts unterteilt werden. Zum Beispiel, um ein fahrbares Auto mit Rädern, die sich drehen und lenken, zu erstellen, sind mindestens fünf MeshParts erforderlich: eines für die Karosserie und vier für jedes Rad des Autos. GenerateModelAsync() erreicht dies durch ein Schema, das die zu erzeugenden Teile auflistet, wie im folgenden Codeausschnitt gezeigt:
Script in ServerScriptService
local GenerationService = game:GetService("GenerationService")
local Workspace = game:GetService("Workspace")
-- Setzen Sie die Eingaben für die generierte Geometrie
local inputs = {
TextPrompt = "grünes Drachenauto mit 4 Rädern"
}
-- Setzen Sie das Schema auf das vordefinierte fünfmodellige Autochassis
local schema = {
PredefinedSchema = "Car5"
}
-- Machen Sie den Aufruf zur Generierung des Modells
local success, result, metadata = pcall(function()
return GenerationService:GenerateModelAsync(inputs, schema)
end)
if success then
-- Skalieren Sie das Modell auf die Zielgröße und positionieren Sie es nahe dem Weltzentrum
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))
-- Verankern Sie alle Teile, damit die Meshes nicht auseinanderfallen
for _, descendant in result:GetDescendants() do
if descendant:IsA("BasePart") then
descendant.Anchored = true
end
end
-- Benennen Sie das Modell und fügen Sie es der Arbeitsfläche hinzu
result.Name = "BasicDragonCarGeneration"
result.Parent = Workspace
else
warn(result)
end
Das folgende Bild zeigt die erwartete Ausgabe und ihre Konstruktion, wie sie in der Explorer-Hierarchie erscheint:


Umsetzbare Skripte
In Roblox umfassen Verhaltensweisen typischerweise die Skripte, Anhänge, Constraints und andere Instanztypen, die an statischen texturierten Geometrien angebracht sind, um sie funktional zu machen. Da GenerateModelAsync() eine Vielzahl von Geometrien in Echtzeit generiert, müssen umsetzbare Skripte angebracht werden, um Verhaltensweisen automatisch an die erwartete Funktionalität anzupassen.
Betrachten Sie zum Beispiel ein Spiel, in dem die Spieler ihre eigenen fahrbaren Autos erstellen können. GenerateModelAsync() nimmt die Eingabe des Spielers und generiert fünf verschiedene Meshes (Karosserie und vier Räder) über das Car5 Schema. Anschließend passt ein vordefiniertes umsetzbares Skript das Fahrverhalten an die Größe und Form des Modells an, um sicherzustellen, dass das Auto fahrbar ist und sich die Räder realistisch drehen.
Um umsetzbare Skripte zu testen:
Laden Sie die Behaviors.rbxm-Datei herunter.
Klicken Sie im Explorer-Hierarchie von Studio mit der rechten Maustaste auf ReplicatedStorage, wählen Sie Einfügen ⟩ Roblox-Modell importieren, und wählen Sie die heruntergeladene Datei aus. Das Modell wird in mehrere Ordner entpackt.

Kopieren Sie einen der folgenden Codeausschnitte und fügen Sie ihn in ein Server-Script innerhalb von ServerScriptService ein, je nachdem, welchen Objekttyp Sie generieren möchten.
Dieses Beispiel generiert ein funktionales Auto mit Bremsen, Nitro-Boost, Audio- und visuellen Effekten sowie einem Geschwindigkeitsmesser auf dem Bildschirm.
Script in ServerScriptServicelocal GenerationService = game:GetService("GenerationService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local Workspace = game:GetService("Workspace")-- Setzen Sie die Eingaben für die generierte Geometrielocal inputs = {TextPrompt = "grünes Drachenauto mit 4 Rädern"}-- Setzen Sie das Schema auf das vordefinierte fünfmodellige Autochassislocal schema = {PredefinedSchema = "Car5"}-- Machen Sie den Aufruf zur Generierung des Modellslocal success, result, metadata = pcall(function()return GenerationService:GenerateModelAsync(inputs, schema)end)if success then-- Skalieren Sie das Modell auf die Zielgrößelocal targetSize = 16local modelSize = result:GetExtentsSize()local scaleFactor = targetSize / math.max(modelSize.X, modelSize.Y, modelSize.Z)result:ScaleTo(scaleFactor)-- Laden Sie das "makeFunctional"-Modul für "CarBehavior"local makeFunctional = require(ReplicatedStorage.Behaviors.CarBehavior.makeFunctional)-- Referenzieren Sie Auto-Teile durch Namen, die durch das "Car5"-Schema garantiert sindlocal 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")-- Setzen Sie die Konfigurationsparameter für das Verhaltenlocal config = {seatPosition = "inside",invisibleWhenSeated = false}-- Verhalten über das "makeFunctional"-Skript anbringenlocal functionalModel = makeFunctional(result, frontLeftWheel, frontRightWheel, rearLeftWheel, rearRightWheel, body, config)-- Positionieren Sie das Modell nahe dem WeltzentrumfunctionalModel:PivotTo(CFrame.new(0, functionalModel:GetExtentsSize().Y / 2, -40))functionalModel.Name = "BasicDragonCarGeneration"functionalModel.Parent = Workspaceelsewarn(result)end