テキストプロンプトとプリセットスキーマを使用することで、あなた(およびゲーム内のプレイヤー)は、静的な 3D アセットと、完全に機能するモデル(車両が走行し、飛行機が飛び、武器が発射する)を生成できます。このガイドでは、動的でプレイヤー主導のクリエイティブ体験の一環として GenerateModelAsync() を使用する方法を示します。
概要
GenerateModelAsync() は、以下の利点を持つマルチメッシュジオメトリの生成を可能にします。
- 提供された スキーマ は、生成されるジオメトリがどのように部品に分割されるかを定義します。
- ゲーム内で生成されたオブジェクトは、すべてのプレイヤーに複製されて表示され、一緒にリアルタイムで構築できます。
- 生成されたメッシュは、全体的により良い形状、シルエット、詳細、そしてアーティファクトの少ない高忠実度を持っています。生成されたテクスチャもより一貫性があり、詳細が増して、粒状感が少なく、焼き付け照明が目立たなくなっています。
- 生成時間のレイテンシが低く、ゲームでの迅速かつ応答性の良い作成を可能にします。
- あなたや、ゲームプレイ中のプレイヤーは、生成されるモデルのサイズや比率を示すためにバウンディングボックスを指定できます。
- 任意の最大三角形数が、生成されたオブジェクトのパフォーマンスをゲームに適合させます。
スキーマベースの生成
機能する可動オブジェクトを作成するには、生成されるジオメトリを複数の MeshParts に分ける必要があります。たとえば、車体と4つの車輪を持つ走行可能な車を作成するには、少なくとも5つの MeshParts が必要です。GenerateModelAsync() は、生成する部品をリストする スキーマ を通じてこれを実現します。以下のコードスニペットに示されています。
Script in ServerScriptService
local GenerationService = game:GetService("GenerationService")
local Workspace = game:GetService("Workspace")
-- 生成されるジオメトリの入力を設定
local inputs = {
TextPrompt = "緑のドラゴンカー 車輪4つ"
}
-- 予め定義された5モデルの車体スキーマを設定
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 = "BasicDragonCarGeneration"
result.Parent = Workspace
else
warn(result)
end
以下の画像は、Explorer 階層に表示される期待される出力とその構造を示しています。


リターゲット可能なスクリプト
Roblox では、動作は通常、スクリプト、アタッチメント、制約 およびその他のインスタンスタイプを静的テクスチャ付きジオメトリに接続して機能を持たせるものです。GenerateModelAsync() は、さまざまなジオメトリを即座に生成するため、リターゲット可能なスクリプト を自動的に期待される機能に応じて取り付ける必要があります。
たとえば、プレイヤーが自分の運転可能な車を作成できるゲームを考えてみましょう。GenerateModelAsync() はプレイヤーのプロンプトを受け取り、Car5 スキーマを介して5つの異なるメッシュ(本体と4つの車輪)を生成します。そして、プリセットのリターゲット可能なスクリプトが、モデルのサイズと形状に応じて運転の動作を適応させ、車が運転可能でその車輪が現実的に回転するようにします。
リターゲット可能なスクリプトをテストするには:
Behaviors.rbxm ファイルをダウンロードします。
スタジオの Explorer 階層で ReplicatedStorage を右クリックし、挿入 ⟩ Roblox モデルをインポートを選択し、ダウンロードしたファイルを選びます。モデルは複数のフォルダーに展開されます。

生成したいオブジェクトのタイプに応じて、以下のコードスニペットのいずれかを ServerScriptService 内のサーバー Script にコピー&ペーストします。
この例は、ブレーキ、ナイトロブースト、音声および視覚効果、画面上のUIスピードメーターを備えた機能的な車を生成します。
Script in ServerScriptServicelocal GenerationService = game:GetService("GenerationService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local Workspace = game:GetService("Workspace")-- 生成されるジオメトリの入力を設定local inputs = {TextPrompt = "緑のドラゴンカー 車輪4つ"}-- 予め定義された5モデルの車体スキーマを設定local schema = {PredefinedSchema = "Car5"}-- モデルを生成するための呼び出しを作成local success, result, metadata = pcall(function()return GenerationService:GenerateModelAsync(inputs, schema)end)if success then-- モデルをターゲットサイズにスケールlocal targetSize = 16local modelSize = result:GetExtentsSize()local scaleFactor = targetSize / math.max(modelSize.X, modelSize.Y, modelSize.Z)result:ScaleTo(scaleFactor)-- "CarBehavior" のために "makeFunctional" モジュールを読み込む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 = "BasicDragonCarGeneration"functionalModel.Parent = Workspaceelsewarn(result)end