学ぶ
エンジンクラス
ProceduralModel

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。


概要
継承されたメンバー

APIリファレンス
プロパティ
GenerationError
読み取り専用
複製されていません
並列読み取り
機能: Basic
ProceduralModel.GenerationError:string

Generator
並列読み取り
機能: Basic
ProceduralModel.Generator:ModuleScript
コードサンプル
デフォルトジェネレーターモジュール
-- ジェネレーター モジュールは、ProceduralModel がそのコンテンツを構築する方法を定義する ModuleScript です。
-- 詳細については https://create.roblox.com/docs/reference/engine/classes/ProceduralModel を参照してください。
--
-- ジェネレーターとして使用するには、ModuleScript は 2 つのフィールドを持つテーブルを返す必要があります:
-- * `Attributes` - デフォルト値のテーブルです。各キーはこのジェネレーターを使用するすべての
-- ProceduralModel における属性になります。ユーザーはプロパティ パネルでこれらの
-- 属性を調整し、新しい入力で再生成できます。
-- * `OnGenerate` - エンジンがモデルのコンテンツを (再) 構築するために呼び出す関数です。
--
-- このスクリプトまたはその配置に特別なことはありません。DataModel のどこにでも存在でき、
-- ProceduralModel の `Generator` プロパティはそれを指すように再割り当てできます。
-- 以下の型アノテーションはオプションですが、必要な形状が明示的に示されるようにここに文書化されています。
-- `GenerationFunctionParams` は生成の実行ごとに `OnGenerate` に渡されます。これには以下が含まれています:
-- * `Attributes` - ProceduralModel 上の現在の属性値。
-- * `Size` - (で定義される) 生成の境界ボリューム `ProceduralModel.Size`。
-- * `Pause` - 協調的な yield。長いループ内で `parameters:Pause()` を呼び出して、
-- 大規模な生成が呼び出しスレッドをスタールしないようにします; エンジンは後で再開する場合があります。
type GenerationFunctionParams<Attributes> = {
Attributes: Attributes,
Size: Vector3,
Pause: (self: GenerationFunctionParams<Attributes>) -> (),
}
-- `GeneratorModuleDefinition` は ModuleScript が返さなければならないテーブルです。
-- `OnGenerate` は値を返してはいけません; 代わりに生成したインスタンスを `targetContainer` に親子関係を持たせます。
-- `targetContainer` (またはその子孫) に親子関係を持たせたものは生成の出力となります。
type GeneratorModuleDefinition<Attributes> = {
Attributes: Attributes,
OnGenerate: (
parameters: GenerationFunctionParams<Attributes>,
targetContainer: GeneratedFolder
) -> (),
}
-- デフォルト属性。ここにある各エントリは、ProceduralModel 上の編集可能な属性として表示されます。
-- 固定の `RandomSeed` により生成が決定的に保持されます: 同じ入力は常に同じ出力を生み出し、
-- これは、ユーザーがプロパティを編集するたびに生成が多く実行される可能性があるため、重要です。
local defaultAttributes = {
BorderThickness = 1,
RandomSeed = 142376088,
}
local Generator: GeneratorModuleDefinition<typeof(defaultAttributes)> = {
Attributes = defaultAttributes,
OnGenerate = function(parameters, targetContainer)
-- 入力。 `parameters.Attributes` はユーザーが設定した内容を反映します
-- ProceduralModel 上の; `parameters.Size` は構築を行うバウンディングボックスです。
local borderThickness = parameters.Attributes.BorderThickness
local random = Random.new(parameters.Attributes.RandomSeed)
local size = parameters.Size
-- 派生値。上記の seeded `random` により、これらは RandomSeed ごとに再現可能になります。
local minSize = math.min(size.X, size.Y, size.Z)
local baseColor = Color3.fromHSV(random:NextNumber(0.5, 0.8), 0.7, 0.8)
local outlineColor = Color3.fromHSV(random:NextNumber(), 0.4, 0.25)
-- 以下の構築をトップダウンで読みやすくするための小さなヘルパーです。ジェネレーターを書くために
-- このようなヘルパーは必要ありません; 繰り返しを減らすだけです。
local function assignProperties(instance: Instance, properties: { [string]: unknown })
-- インスタンスが DataModel に入る前に他のプロパティが配置されるように最後に親を設定します。
for name, value in properties do
if name ~= "Parent" then
(instance :: any)[name] = value
end
end
if properties.Parent ~= nil then
instance.Parent = properties.Parent :: Instance
end
return instance
end
local function createInstance(className: string, properties: { [string]: unknown })
return assignProperties(Instance.new(className), properties)
end
local function createPartWithDefaults(properties: { [string]: unknown })
-- 生成されたパーツは通常アンカーされていて衝突しません; 必要に応じて部分ごとにオーバーライドします。
local part = createInstance("Part", {
Anchored = true,
CanCollide = false,
Color = baseColor,
Material = Enum.Material.SmoothPlastic,
BottomSurface = Enum.SurfaceType.Smooth,
TopSurface = Enum.SurfaceType.Smooth,
})
return assignProperties(part, properties)
end
-- 以下のすべては `targetContainer` に親子関係を持たせ、これはインスタンスが
-- 生成された出力の一部になる方法です。ここに親子関係を持たせないインスタンスは破棄されます。
-- ビルボードの Adornee として使用される見えないバウンディングパート。
local bounds = createPartWithDefaults({
Name = "Bounds",
Parent = targetContainer,
Transparency = 1,
Size = size,
})
-- その下に境界のアウトラインがある凹状のプラットフォーム。
local base = createPartWithDefaults({
Name = "PlatformBase",
Parent = targetContainer,
Color = baseColor,
CFrame = CFrame.new(0, (-size.Y + 1) / 2, 0),
Size = Vector3.new(
size.X - 2 * borderThickness,
1.01,
size.Z - 2 * borderThickness
),
})
local outline = createPartWithDefaults({
Name = "PlatformOutline",
Parent = targetContainer,
Color = outlineColor,
Position = Vector3.yAxis * (-size.Y + 1) / 2,
Size = Vector3.new(size.X, 1, size.Z),
})
-- "こんにちは世界!" ビルボード。ジェネレーターはパーツだけでなく、任意のインスタンスタイプを作成できます。
local billboard = createInstance("BillboardGui", {
Name = "Text",
Parent = targetContainer,
Adornee = bounds,
LightInfluence = 0,
Size = UDim2.fromScale(minSize, minSize),
})
local textLabel = createInstance("TextLabel", {
Name = "HelloWorld",
Parent = billboard,
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundTransparency = 1,
Position = UDim2.fromScale(0.5, 0.5),
Size = UDim2.fromScale(1, 1),
Text = "こんにちは世界!",
TextColor3 = baseColor,
TextScaled = true,
TextStrokeTransparency = 0,
})
local textStroke = createInstance("UIStroke", {
Parent = textLabel,
Color = outlineColor,
Thickness = borderThickness * 3,
})
end,
}
-- モジュール定義を返すことで、これは ModuleScript を `Generator` として使用可能にします。
return Generator
クラシックはしごジェネレーター モジュール
-- ジェネレーター モジュールは、`Attributes` と `OnGenerate` を返す ModuleScript です。
-- この ModuleScript を ProceduralModel の `Generator` プロパティに割り当てると、モデルのサイズ、属性、
-- またはモジュールソースが変更されるたびに `OnGenerate` が実行されます。
-- https://create.roblox.com/docs/reference/engine/classes/ProceduralModel を参照してください。
local ClassicRobloxLadderGenerator = {}
-- デフォルトの属性値。各キーは、このジェネレーターを使用する任意の ProceduralModel の編集可能な属性となり、
-- Attributes の下で Studio プロパティパネルに表示されます。いずれかを編集すると、新しい値で `OnGenerate` が再実行されます。
ClassicRobloxLadderGenerator.Attributes = {
RungSpacing = 2,
RungThickness = 1,
PostSize = 1,
Color = Color3.new(0.5, 0.3, 0),
}
-- `OnGenerate` はエンジンによってモデルの内容を構築するために呼び出されます。
-- 契約:
-- * `parameters.Size` - 構築のためのバウンディングボックス(`ProceduralModel.Size` から)。
-- * `parameters.Attributes` - ProceduralModel の現在の属性値。
-- * `parameters:Pause()` - 協調的な一時停止; 大規模な生成がスレッドをブロックしないように長いループ内で呼び出します。
-- * `targetContainer` - ここ(またはその子孫に)親子関係を持つものが出力になります。
-- * `OnGenerate` から値を返さないでください; 出力は `targetContainer` を介して通信されます。
ClassicRobloxLadderGenerator.OnGenerate = function(parameters, targetContainer)
local size = parameters.Size
local rungThickness = parameters.Attributes.RungThickness
local postSize = parameters.Attributes.PostSize
local count = (size.Y - rungThickness) // parameters.Attributes.RungSpacing + 1
local function createPart(position, size)
local part = Instance.new("Part")
part.Size = size
part.Position = position
part.Anchored = true
part.Color = parameters.Attributes.Color
part.TopSurface = Enum.SurfaceType.Smooth
part.BottomSurface = Enum.SurfaceType.Smooth
-- `targetContainer` に親子関係を持たせることが、その部分を生成された出力に追加します。
part.Parent = targetContainer
end
-- バウンディングボックスの底から上に積み重ねられたラング。
local position = Vector3.new(0, -size.Y / 2 + rungThickness / 2, 0)
for i = 1, count do
-- ラングの間に一時停止し、多くのラングを持つはしごがスレッドをブロックしないようにします。
parameters:Pause()
createPart(position, Vector3.new(size.X - 2 * postSize, rungThickness, size.Z))
position += Vector3.new(0, parameters.Attributes.RungSpacing, 0)
end
-- 全高を spanning する左側と右側のポスト。
createPart(Vector3.new(-0.5 * size.X + postSize / 2, 0, 0), Vector3.new(postSize, size.Y, size.Z))
createPart(Vector3.new(0.5 * size.X - postSize / 2, 0, 0), Vector3.new(postSize, size.Y, size.Z))
end
-- モジュール定義を返すことが、この ModuleScript を `Generator` として使用可能にします。
return ClassicRobloxLadderGenerator

Size
並列読み取り
機能: Basic
ProceduralModel.Size:Vector3

方法
ForceGeneration
機能: Basic
ProceduralModel:ForceGeneration():boolean
戻り値

WaitForGenerationAsync
イールド
機能: Basic
ProceduralModel:WaitForGenerationAsync():boolean
戻り値
コードサンプル
生成に失敗しました
local proceduralModel = ...
proceduralModel:SetAttribute("ThrowAnError", true) --> 故意に失敗
print(proceduralModel:WaitForGenerationAsync()) --> false

©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。