Generasi model

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Melalui prompt teks dan skema preset, Anda (dan pemain dalam permainan) dapat menghasilkan aset 3D statis dan model fungsional sepenuhnya seperti kendaraan yang dapat dikendarai, pesawat terbang, dan senjata yang dapat menembak. Panduan ini menunjukkan cara menggunakan GenerateModelAsync() sebagai bagian dari pengalaman kreatif yang dinamis dan dipimpin pemain.

Ikhtisar

GenerateModelAsync() memungkinkan generasi geometri multi-mesh dengan keuntungan sebagai berikut:

  • Skema yang diberikan mendefinisikan bagaimana geometri yang dihasilkan akan dibagi menjadi bagian.
  • Setiap objek yang dihasilkan dalam permainan akan direplikasi dan terlihat oleh semua pemain, memungkinkan mereka untuk membangun bersama secara waktu nyata.
  • Mesh yang dihasilkan memiliki fidelitas yang lebih tinggi dengan bentuk, siluet, detail yang lebih baik, dan artefak yang lebih sedikit. Tekstur yang dihasilkan lebih koheren dan detail, dengan lebih sedikit kekasaran dan pencahayaan yang kurang terlihat.
  • Waktu generasi memiliki latensi yang lebih rendah, memungkinkan penciptaan yang lebih cepat dan responsif dalam permainan.
  • Anda bahkan bisa meminta pemain selama waktu bermain untuk menentukan batasan ukuran untuk menyarankan ukuran dan proporsi model yang dihasilkan.
  • Jumlah segitiga maksimum opsional menjaga objek yang dihasilkan tetap optimal untuk permainan Anda.

Generasi berbasis skema

Untuk membuat objek yang dapat digerakkan dan fungsional, geometri yang dihasilkan harus dipisahkan ke dalam beberapa MeshParts. Sebagai contoh, untuk membuat mobil yang dapat dikendarai dengan roda yang berputar dan dapat diputar, setidaknya diperlukan lima MeshParts: satu untuk bodi mobil dan empat untuk setiap roda mobil. GenerateModelAsync() mencapainya melalui sebuah skema yang mencantumkan bagian yang akan dihasilkan, seperti yang ditunjukkan dalam potongan kode berikut:

Script in ServerScriptService

local GenerationService = game:GetService("GenerationService")
local Workspace = game:GetService("Workspace")
-- Siapkan input untuk geometri yang dihasilkan
local inputs = {
TextPrompt = "mobil naga hijau dengan 4 roda"
}
-- Tetapkan skema ke sasis mobil lima-model yang telah ditentukan
local schema = {
PredefinedSchema = "Car5"
}
-- Lakukan panggilan untuk menghasilkan model
local success, result, metadata = pcall(function()
return GenerationService:GenerateModelAsync(inputs, schema)
end)
if success then
-- Skala model ke ukuran target dan posisikan dekat pusat dunia
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))
-- Jamin semua bagian agar mesh tidak terpisah
for _, descendant in result:GetDescendants() do
if descendant:IsA("BasePart") then
descendant.Anchored = true
end
end
-- Beri nama model dan parent ke workspace
result.Name = "BasicDragonCarGeneration"
result.Parent = Workspace
else
warn(result)
end

Gambar berikut menunjukkan keluaran yang diharapkan dan konstruksinya seperti yang terlihat dalam hirarki Explorer:

Skrip yang dapat ditargetkan ulang

Di Roblox, perilaku biasanya mencakup skrip, lampiran, kendala, dan jenis instance lain yang terpasang pada geometri bertekstur statis untuk membuatnya fungsional. Karena GenerateModelAsync() menghasilkan berbagai geometri secara instan, maka skrip yang dapat ditargetkan ulang harus terpasang untuk secara otomatis menyesuaikan perilaku dengan fungsionalitas yang diharapkan.

Sebagai contoh, pertimbangkan sebuah permainan di mana pemain bisa membuat mobil yang bisa dikendarai sendiri. GenerateModelAsync() mengambil prompt pemain dan menghasilkan lima mesh yang berbeda (bodi dan empat roda) melalui skema Car5. Kemudian, skrip yang sudah ditentukan dijadikan panduan untuk mengadaptasi perilaku berkendara sesuai dengan ukuran dan bentuk model untuk memastikan mobil tersebut dapat dikendarai dan roda-rodanya berputar secara realistis.

Untuk menguji skrip yang dapat ditargetkan ulang:

  1. Unduh file Behaviors.rbxm.

  2. Dalam hirarki Explorer Studio, klik kanan ReplicatedStorage, pilih Insert ⟩ Import Roblox Model, dan pilih file yang diunduh. Model akan dipecah menjadi beberapa folder.

  3. Salin dan tempel salah satu potongan kode berikut ke dalam Script server dalam ServerScriptService, tergantung pada jenis objek yang ingin Anda hasilkan.

    Contoh ini menghasilkan mobil fungsional dengan rem, dorongan nitro, efek audio dan visual, dan indikator kecepatan di layar.

    Script in ServerScriptService

    local GenerationService = game:GetService("GenerationService")
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local Workspace = game:GetService("Workspace")
    -- Siapkan input untuk geometri yang dihasilkan
    local inputs = {
    TextPrompt = "mobil naga hijau dengan 4 roda"
    }
    -- Tetapkan skema ke sasis mobil lima-model yang telah ditentukan
    local schema = {
    PredefinedSchema = "Car5"
    }
    -- Lakukan panggilan untuk menghasilkan model
    local success, result, metadata = pcall(function()
    return GenerationService:GenerateModelAsync(inputs, schema)
    end)
    if success then
    -- Skala model ke ukuran target
    local targetSize = 16
    local modelSize = result:GetExtentsSize()
    local scaleFactor = targetSize / math.max(modelSize.X, modelSize.Y, modelSize.Z)
    result:ScaleTo(scaleFactor)
    -- Muat modul "makeFunctional" untuk "CarBehavior"
    local makeFunctional = require(ReplicatedStorage.Behaviors.CarBehavior.makeFunctional)
    -- Referensi bagian mobil dengan nama yang dijamin melalui skema "Car5"
    local body = result:FindFirstChild("bodhi")
    local frontLeftWheel = result:FindFirstChild("roda depan kiri")
    local frontRightWheel = result:FindFirstChild("roda depan kanan")
    local rearLeftWheel = result:FindFirstChild("roda belakang kiri")
    local rearRightWheel = result:FindFirstChild("roda belakang kanan")
    -- Setel parameter konfigurasi perilaku
    local config = {
    seatPosition = "di dalam",
    invisibleWhenSeated = false
    }
    -- Pasang perilaku melalui skrip "makeFunctional"
    local functionalModel = makeFunctional(result, frontLeftWheel, frontRightWheel, rearLeftWheel, rearRightWheel, body, config)
    -- Posisikan model dekat pusat dunia
    functionalModel:PivotTo(CFrame.new(0, functionalModel:GetExtentsSize().Y / 2, -40))
    functionalModel.Name = "BasicDragonCarGeneration"
    functionalModel.Parent = Workspace
    else
    warn(result)
    end
©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.