模型生成

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

透過文字提示和預設架構,您(以及遊戲中的玩家)可以生成靜態 3D 資產和 完全功能 的模型,例如可以行駛的車輛、飛行的飛機和射擊的武器。本指南演示了如何使用 GenerateModelAsync() 作為動態的玩家驅動創意體驗的一部分。

概述

GenerateModelAsync() 能夠生成多網格幾何,具有以下優勢:

  • 提供的 架構 定義了生成的幾何如何被分割成不同的部分。
  • 在遊戲中生成的任何物件將被複製並對所有玩家可見,允許他們實時共同構建。
  • 生成的網格具有更高的真實感,整體形狀、輪廓、細節更豐富,且瑕疵更少。生成的材質更為一致和細緻,顆粒感更低,內建的照明效果不那麼明顯。
  • 生成時間的延遲更低,使得在遊戲中能更快速、更靈敏地創建。
  • 您甚至在遊戲時間中也可以指定邊界框,以建議生成模型的大小和比例。
  • 可選的最大三角形數量保持生成物件在您的遊戲中高效運行。

基於架構的生成

要創建可動的功能性物件,生成的幾何必須分成多個 MeshParts。例如,要創建一輛可駕駛的汽車,汽車的車輪必須能夠旋轉和轉向,至少需要五個 MeshParts:一個用於車身,四個用於每個車輪。GenerateModelAsync() 通過 架構 來實現這一點,該架構列出了要生成的部分,如下列代碼片段所示:

位於 ServerScriptService 的腳本

local GenerationService = game:GetService("GenerationService")
local Workspace = game:GetService("Workspace")
-- 設置生成幾何的輸入
local inputs = {
TextPrompt = "綠色龍車,具有 4 個輪子"
}
-- 將架構設置為預定義的五模型汽車底盤
local schema = {
PredefinedSchema = "Car5"
}
-- 發呼叫生成模型
local success, result, metadata = pcall(function()
return GenerationService:GenerateModelAsync(inputs, schema)
end)
if success then
-- 將模型縮放到目標大小並將其放置在世界中心附近
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))
-- 固定所有部件,以免網格掉落
for _, descendant in result:GetDescendants() do
if descendant:IsA("BasePart") then
descendant.Anchored = true
end
end
-- 命名模型並將其父級設為工作空間
result.Name = "基本龍車生成"
result.Parent = Workspace
else
warn(result)
end

下圖顯示了預期的輸出及其在 資源管理器 結構中的建構情況:

可重新定位的腳本

在 Roblox 中,行為 通常包含附加到靜態紋理幾何上的腳本、附件、約束 和其他實例類型,以使它們功能性。由於 GenerateModelAsync() 會即時生成廣泛的幾何,因此必須附上 可重新定位的腳本 以自動適應行為以符合預期的功能性。

例如,考慮一個讓玩家製作自駕車的遊戲。GenerateModelAsync() 接收玩家的提示並通過 Car5 架構 生成五個不同的網格(車身和四個輪子)。然後,一個預設的可重新定位腳本將其駕駛行為調整為模型的大小和形狀,以確保汽車可駕駛,並且輪子能夠現實地旋轉。

要測試可重新定位的腳本:

  1. 下載 Behaviors.rbxm 檔案。

  2. 在 Studio 的 資源管理器 結構中,右鍵單擊 ReplicatedStorage,選擇 插入 ⟩ 導入 Roblox 模型,然後選擇下載的檔案。模型將解壓成幾個文件夾。

  3. 根據您想生成的物件類型,將以下代碼片段之一複製並粘貼到 ServerScriptService 中的服務器 Script

    此示例生成一輛功能性汽車,具有剎車、氮氣增壓、音效和視覺效果,以及一個屏幕上顯示的速度計。

    位於 ServerScriptService 的腳本

    local GenerationService = game:GetService("GenerationService")
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local Workspace = game:GetService("Workspace")
    -- 設置生成幾何的輸入
    local inputs = {
    TextPrompt = "綠色龍車,具有 4 個輪子"
    }
    -- 將架構設置為預定義的五模型汽車底盤
    local schema = {
    PredefinedSchema = "Car5"
    }
    -- 發呼叫生成模型
    local success, result, metadata = pcall(function()
    return GenerationService:GenerateModelAsync(inputs, schema)
    end)
    if success then
    -- 將模型縮放到目標大小
    local targetSize = 16
    local modelSize = result:GetExtentsSize()
    local scaleFactor = targetSize / math.max(modelSize.X, modelSize.Y, modelSize.Z)
    result:ScaleTo(scaleFactor)
    -- 載入 "makeFunctional" 模塊以“CarBehavior”
    local makeFunctional = require(ReplicatedStorage.Behaviors.CarBehavior.makeFunctional)
    -- 通過名稱引用汽車部件,這些名稱是通過 "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")
    -- 設置行為配置參數
    local config = {
    seatPosition = "inside",
    invisibleWhenSeated = false
    }
    -- 通過 "makeFunctional" 腳本附加行為
    local functionalModel = makeFunctional(result, frontLeftWheel, frontRightWheel, rearLeftWheel, rearRightWheel, body, config)
    -- 將模型放置在世界中心附近
    functionalModel:PivotTo(CFrame.new(0, functionalModel:GetExtentsSize().Y / 2, -40))
    functionalModel.Name = "基本龍車生成"
    functionalModel.Parent = Workspace
    else
    warn(result)
    end
©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。