Thông qua các gợi ý văn bản và các lược đồ đã định sẵn, bạn (và người chơi trong trò chơi) có thể tạo ra cả tài sản 3D tĩnh và các mô hình hoàn chỉnh như xe cộ có thể lái, máy bay có thể bay và vũ khí có thể bắn. Hướng dẫn này minh họa cách sử dụng GenerateModelAsync() như một phần của trải nghiệm sáng tạo động, do người chơi điều khiển.
Tổng quan
GenerateModelAsync() cho phép tạo ra các hình học đa mesh với những lợi ích sau:
- Lược đồ được cung cấp xác định cách hình học được tạo ra sẽ được chia thành các phần.
- Bất kỳ đối tượng nào được tạo ra trong trò chơi sẽ được lặp lại và có thể nhìn thấy bởi tất cả người chơi, cho phép họ xây dựng cùng nhau trong thời gian thực.
- Các mesh được tạo ra có độ chân thực cao hơn với hình dáng, đường nét tổng thể tốt hơn, nhiều chi tiết hơn và ít hiện tượng dị thường hơn. Các kết cấu được tạo ra nhất quán và chi tiết hơn, với ít hạt hơn và ánh sáng tích hợp ít rõ ràng hơn.
- Thời gian tạo ra có độ trễ thấp hơn, cho phép việc tạo ra nhanh hơn và phản hồi tốt hơn trong các trò chơi.
- Bạn và thậm chí người chơi trong thời gian chơi có thể chỉ định các hộp giới hạn để gợi ý kích thước và tỉ lệ của mô hình được tạo ra.
- Một số lượng tam giác tối đa tùy chọn giúp giữ cho các đối tượng được tạo ra hiệu suất cho trò chơi của bạn.
Tạo ra dựa trên lược đồ
Để tạo các đối tượng có thể hoạt động và khớp nối, hình học được tạo ra phải được tách thành nhiều MeshParts. Ví dụ, để tạo ra một chiếc xe có thể lái với bánh xe quay và có thể lái, cần ít nhất năm MeshParts: một cho thân xe và bốn cho mỗi bánh xe của xe. GenerateModelAsync() đạt được điều này thông qua một lược đồ liệt kê các phần cần tạo, như được hiển thị trong đoạn mã sau:
Script in ServerScriptService
local GenerationService = game:GetService("GenerationService")
local Workspace = game:GetService("Workspace")
-- Thiết lập đầu vào cho hình học được tạo ra
local inputs = {
TextPrompt = "chiếc xe rồng xanh với 4 bánh"
}
-- Đặt lược đồ thành khung xe năm mô hình đã được định trước
local schema = {
PredefinedSchema = "Car5"
}
-- Thực hiện cuộc gọi để tạo mô hình
local success, result, metadata = pcall(function()
return GenerationService:GenerateModelAsync(inputs, schema)
end)
if success then
-- Tỷ lệ mô hình theo kích thước mục tiêu và đặt gần trung tâm thế giới
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))
-- Đảm bảo tất cả các phần đều cố định để các mesh không bị tan vỡ
for _, descendant in result:GetDescendants() do
if descendant:IsA("BasePart") then
descendant.Anchored = true
end
end
-- Tên mô hình và làm cho nó là cha của workspace
result.Name = "BasicDragonCarGeneration"
result.Parent = Workspace
else
warn(result)
end
Hình ảnh sau đây cho thấy đầu ra mong đợi và cách mà nó được xây dựng như nó xuất hiện trong cấu trúc Explorer:


Các kịch bản có thể điều chỉnh
Trong Roblox, hành vi thường bao gồm các kịch bản, các phần đính kèm, ràng buộc, và các loại thực thể khác được đính kèm vào các hình học có kết cấu tĩnh để làm cho chúng có chức năng. Vì GenerateModelAsync() tạo ra một loạt các hình học ngay lập tức, các kịch bản có thể điều chỉnh phải được đính kèm để tự động điều chỉnh các hành vi theo chức năng dự kiến.
Ví dụ, hãy xem xét một trò chơi nơi người chơi có thể tạo ra những chiếc xe của riêng mình. GenerateModelAsync() nhận gợi ý của người chơi và tạo ra năm mesh riêng biệt (thân xe và bốn bánh) thông qua lược đồ Car5 schema. Sau đó, một kịch bản có thể điều chỉnh đã được định sẵn điều chỉnh hành vi lái của nó theo kích thước và hình dạng của mô hình để đảm bảo chiếc xe có thể lái được và bánh xe quay một cách thực tế.
Để kiểm tra các kịch bản có thể điều chỉnh:
Tải xuống tệp Behaviors.rbxm.
Trong cấu trúc Explorer của Studio, nhấp chuột phải vào ReplicatedStorage, chọn Chèn ⟩ Nhập Mô hình Roblox, và chọn tệp đã tải xuống. Mô hình sẽ được hiện ra trong một số thư mục.

Sao chép và dán một trong các đoạn mã sau vào một Script trên máy chủ trong ServerScriptService, tùy thuộc vào loại đối tượng bạn muốn tạo ra.
Ví dụ này tạo ra một chiếc xe có chức năng với phanh, boost nitro, hiệu ứng âm thanh và hình ảnh, và một bảng đo tốc độ trên màn hình.
Script in ServerScriptServicelocal GenerationService = game:GetService("GenerationService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local Workspace = game:GetService("Workspace")-- Thiết lập đầu vào cho hình học được tạo ralocal inputs = {TextPrompt = "chiếc xe rồng xanh với 4 bánh"}-- Đặt lược đồ thành khung xe năm mô hình đã được định trướclocal schema = {PredefinedSchema = "Car5"}-- Thực hiện cuộc gọi để tạo mô hìnhlocal success, result, metadata = pcall(function()return GenerationService:GenerateModelAsync(inputs, schema)end)if success then-- Tỷ lệ mô hình theo kích thước mục tiêulocal targetSize = 16local modelSize = result:GetExtentsSize()local scaleFactor = targetSize / math.max(modelSize.X, modelSize.Y, modelSize.Z)result:ScaleTo(scaleFactor)-- Tải mô-đun "makeFunctional" cho "CarBehavior"local makeFunctional = require(ReplicatedStorage.Behaviors.CarBehavior.makeFunctional)-- Tham chiếu các bộ phận xe theo tên đảm bảo qua lược đồ "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")-- Thiết lập các tham số cấu hình hành vilocal config = {seatPosition = "inside",invisibleWhenSeated = false}-- Đính kèm hành vi thông qua kịch bản "makeFunctional"local functionalModel = makeFunctional(result, frontLeftWheel, frontRightWheel, rearLeftWheel, rearRightWheel, body, config)-- Đặt mô hình gần trung tâm thế giớifunctionalModel:PivotTo(CFrame.new(0, functionalModel:GetExtentsSize().Y / 2, -40))functionalModel.Name = "BasicDragonCarGeneration"functionalModel.Parent = Workspaceelsewarn(result)end