Metin istemleri ve önceden tanımlanmış şemalar aracılığıyla, siz (ve oyundaki oyuncular) hem statik 3B varlıklar hem de tam işlevsel modeller oluşturabilirsiniz; örneğin, sürücü olarak hareket eden araçlar, uçan uçaklar ve ateş eden silahlar. Bu kılavuz, GenerateModelAsync()'yi dinamik, oyuncu odaklı bir yaratıcı deneyimin parçası olarak nasıl kullanacağınızı göstermektedir.
Genel Bakış
GenerateModelAsync() çoklu ağ geometrilerinin oluşturulmasını sağlar ve aşağıdaki avantajlara sahiptir:
- Sağlanan şema, oluşturulan geometrinin parçalara nasıl ayrılacağını tanımlar.
- Oyunda oluşturulan herhangi bir nesne kopyalanacak ve tüm oyunculara görünür hale gelecektir, bu da onların gerçek zamanlı olarak birlikte inşa etmesine olanak tanır.
- Oluşturulan ağlar daha yüksek çözünürlükte olup daha iyi genel biçimlere, siluetlere, daha fazla detaya ve daha az artefakta sahiptir. Oluşturulan dokular daha tutarlı ve ayrıntılıdır, daha az grenlenme ve daha az belirgin pişirilmiş aydınlatma ile gelir.
- Oluşturma süreleri daha düşük gecikmeye sahiptir ve bu da oyunlarda daha hızlı ve daha duyarlı yaratıma olanak tanır.
- Sizin ve hatta oyuncuların oyun süresince oluşturulan modelin boyutunu ve oranlarını öneren sınır kutuları belirlemesine olanak tanır.
- İsteğe bağlı maksimum üçgen sayısı, oluşturulan nesnelerin oyununuz için performanslı kalmasını sağlar.
Şemaya dayalı oluşturma
Hareketli, işlevsel nesneler oluşturmak için, oluşturulan geometri birden fazla MeshParts 'e ayrılmalıdır. Örneğin, dönen ve yönlendirme yeteneğine sahip bir araba oluşturmak için en az beş MeshParts gereklidir: bir araba gövdesi ve her bir arabanın dört tekerleği için biri. GenerateModelAsync() bunu, parçaların oluşturulmasını listeleyen bir şema aracılığıyla gerçekleştirir; bu aşağıdaki kod örneğinde gösterilmektedir:
Script in ServerScriptService
local GenerationService = game:GetService("GenerationService")
local Workspace = game:GetService("Workspace")
-- Oluşturulan geometri için girdileri ayarla
local inputs = {
TextPrompt = "yeşil ejderha aracı ile 4 tekerlek"
}
-- Şemayı önceden tanımlanmış beş-model araba şasisine ayarla
local schema = {
PredefinedSchema = "Car5"
}
-- Modeli oluşturmak için çağrıda bulunun
local success, result, metadata = pcall(function()
return GenerationService:GenerateModelAsync(inputs, schema)
end)
if success then
-- Modeli hedef boyuta ölçekle ve dünya merkezine yakına taşı
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))
-- Ağların dağılmaması için tüm parçaları sabitle
for _, descendant in result:GetDescendants() do
if descendant:IsA("BasePart") then
descendant.Anchored = true
end
end
-- Modelin adını ver ve çalışma alanına ekle
result.Name = "BasicDragonCarGeneration"
result.Parent = Workspace
else
warn(result)
end
Aşağıdaki görüntü, beklenen çıktıyı ve Explorer hiyerarşisinde nasıl göründüğünü gösterir:


Yeniden hedeflenebilir betikler
Roblox'ta, davranışlar genellikle işlevsel hale getirmek için statik dokulu geometrilere bağlı betikler, bağlantılar, kısıtlamalar ve diğer örnek türlerini kapsar. GenerateModelAsync() çeşitli geometrileri anında oluşturduğu için, yeniden hedeflenebilir betikler , beklenen işlevselliğe uyum sağlamak için otomatik olarak eklenmelidir.
Örneğin, oyuncuların kendi sürülebilir arabalarını yapabileceği bir oyunu düşünün. GenerateModelAsync() oyuncunun istemini alır ve Car5 şeması aracılığıyla beş farklı ağı (gövde ve dört tekerlek) oluşturur. Ardından, önceden tanımlanmış bir yeniden hedeflenebilir betik, aracın sürülebilir olmasını ve tekerleklerinin gerçekçi bir şekilde dönmesini sağlamak için modelin boyutuna ve şekline sürüş davranışını uyarlayacaktır.
Yeniden hedeflenebilir betikleri test etmek için:
Behaviors.rbxm dosyasını indirin.
Studio'nun Explorer hiyerarşisinde ReplicatedStorage üzerinde sağ tıklayın, Ekle ⟩ Roblox Modelini İçe Aktar seçeneğini seçin ve indirdiğiniz dosyayı seçin. Model birkaç klasöre ayrılır.

Oluşturmak istediğiniz nesne türüne bağlı olarak, bir sunucu Script'ine aşağıdaki kod kesitlerinden birini kopyalayıp yapıştırın.
Bu örnek, bir fren, nitro artırıcı, ses ve görsel efektler, ve ekranda bir hız göstergesi ile işlevsel bir araba üretir.
Script in ServerScriptServicelocal GenerationService = game:GetService("GenerationService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local Workspace = game:GetService("Workspace")-- Oluşturulan geometri için girdileri ayarlalocal inputs = {TextPrompt = "yeşil ejderha aracı ile 4 tekerlek"}-- Şemayı önceden tanımlanmış beş-model araba şasisine ayarlalocal schema = {PredefinedSchema = "Car5"}-- Modeli oluşturmak için çağrıda bulununlocal success, result, metadata = pcall(function()return GenerationService:GenerateModelAsync(inputs, schema)end)if success then-- Modeli hedef boyuta ölçeklelocal targetSize = 16local modelSize = result:GetExtentsSize()local scaleFactor = targetSize / math.max(modelSize.X, modelSize.Y, modelSize.Z)result:ScaleTo(scaleFactor)-- "CarBehavior" için "makeFunctional" modülünü yüklelocal makeFunctional = require(ReplicatedStorage.Behaviors.CarBehavior.makeFunctional)-- "Car5" şeması aracılığıyla garantili parçaları adlarıyla referans allocal 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")-- Davranışsal yapılandırma parametrelerini ayarlalocal config = {seatPosition = "inside",invisibleWhenSeated = false}-- "makeFunctional" betiği aracılığıyla davranışı eklelocal functionalModel = makeFunctional(result, frontLeftWheel, frontRightWheel, rearLeftWheel, rearRightWheel, body, config)-- Modeli dünya merkezine yakın bir yere yerleştirfunctionalModel:PivotTo(CFrame.new(0, functionalModel:GetExtentsSize().Y / 2, -40))functionalModel.Name = "BasicDragonCarGeneration"functionalModel.Parent = Workspaceelsewarn(result)end