モデルはコンテナオブジェクトで、オブジェクトをグループ化することができます。BaseParts のコレクションを保持するために最適で、機能を拡張するための数々の機能を持っています。
モデルは 幾何学的 グループ化を表示することがあります。グループ化に幾何学的なインタープェートがない場合、たとえば Scripts コレクション、 Folder を使用してください。
共同部分のパーツがジョイントされて共同部分で移動または破壊されるモデルの場合、PrimaryPart セットが含まれています。これは、モデル内のどのパーツがピボットとバウンドボックスの「フォロー」を「フォロー」するかを指定します。静的モデルは、1つの場所に留
モデルには、Roblox プレイヤーのキャラクターを含む多くのアプリケーションがあります。また、重要なことを忘れないようにするためにいくつかのユニークな動作があります:
- Class.Humanoid と Part の名前のついた 頭 がモデルの下にあると、モデルの上に 1>キャラクター名/健康ディスプレイ1> が表示されます。詳細は、4>キャラクター名/健康ディスプレイ4> を参照してください。
- パーツの位置 on the Y 軸に Workspace.FallenPartsDestroyHeight 値がヒットし、Model 内の最後のオブジェクトである場合、モデルは同じように破壊されます。
- Class.Workspace.StreamingEnabled を ModelStreamingMode に設定して、LevelOfDetail の値がクライアント間でどのようにレプリケートされ、/または削除されるかを制御します。さらに、Class.Model.LevelOfDetail|LevelOfDetail の値は
すべての Instance タイプの場合、親 Model が
コードサンプル
local function groupObjects(objectTable)
local model = Instance.new("Model")
for _, object in pairs(objectTable) do
object.Parent = model
end
return model
end
local objects = {
Instance.new("Part"),
Instance.new("Part"),
}
groupObjects(objects)
概要
プロパティ
インスタンスストリーミングを有効にしたエクスペリエンスの詳細レベルを設定します。
インスタンスストリーミングが有効になっているときに Models のモデルストリーミング動作を制御します。
Class.Model または nil が明示的に設定する定されていない場合のメイン部分。
モデルのピボットの周りにモデルをスケールするための編集者専用プロパティ。このプロパティを設定すると、スケールが Model/ScaleTo が呼び出されたように移動します。
Class.Model のピボットが 不 に設定されている場所を決定します。
方法
このモデルを特定のプレイヤーのために持続化するように設定します。 Model.ModelStreamingMode は、 PersistentPerPlayer に設定されなければ、動作が追加された結果により変更されることはありません。
モデルのすべてのパーツが含まれているボリュームの説明を返します。
Class.BasePart|BaseParts が含まれる最小限のバウンドボックスのサイズを返します。Model 、Model.PrimaryPart が設定されている場合は、1>Class.BasePart|BaseParts1> が返されます。
このモデルオブジェクトが持続する Player すべてのオブジェクトを返します。このメソッドを Script から呼び出すか、LocalScript から呼び出すかによって動作は変わります。
モデルのキャノニカルスケールを返します。モデルの新規作成には、デフォルトで 1 が返されますが、Model/ScaleTo でスケールされると変更されます。
Class.Model.PrimaryPart|PrimaryPart を指定された位置に移動します。Class.Model.PrimaryPart が指定されていない場合は、モデルのルートパーツが使用されます。
このモデルは特定のプレイヤーのために再び持続しなくなります。 Model.ModelStreamingMode は、 PersistentPerPlayer に設定されて、結果として動作を変更するために変更された場合には持続しなくなります。
スケールファクターを設定し、すべての子孫インスタンスのサイズと場所を調整して、スケールファクターが 1 の場合、インスタンスのオリジナルサイズと場所に対するスケールファクターが相対的に変更されます。
Class.Model を Datatype.Vector3 のオフセットを保持しながら シフトすると、モデルのオリエンテーションを保持します。如果 他の Class.BasePart または Class.Terrain が新しい位置に既に存在する場合は、1> Class.Model は1>
Class.PVInstance のピボットを取得します。
Class.PVInstance とそのすべての子孫 PVInstances は、ピボットが指定の CFrame に移動します。
プロパティ
LevelOfDetail
ストリーミング を有効にするインスタンスのモデルの詳細レベルを設定します。
StreamingMesh に設定されていると、モデルのすべての子パーツにラップする低解像度の「imposter」メッシュ (色付き、粒子メッシュ) がストリーミング範囲の外に表示されます。
енью Grid.ModelLevelOfDetail|Disabled または Automatic Grid.ModelLevelOfDetail|Automatic に設定されていると、低解像度のメッシュは表示されません。
ModelStreamingMode
インスタンスのストリーミングが有効になっているときに Models のストリーミング方法を制御します。ストリーミングが有効になっていないときの動作は影響を受けません。ストリーミングが有効になっていないときは影響を受けません。
このプロパティは、ストリーミングが有効になっている Studio の プロパティ ウィンドウからのみ変更する必要があります。また、Scripts 内では、LocalScripts のみを変更することができますが、2>Class.LocalScript|LocalScripts2> 内では、5>Class.Script|Scripts5> のみを変更するこ
PrimaryPart
Class.Model の主要部分については、BasePart を参照してください。これは、モデルのピボットに物理的に参照するための Class.BasePart です。つまり、モデル内のパーツが物理的にシミュレートされたり、他の方法によって移動された場合、ピボットは主要部分と同期されます。
注: Models には、デフォルトで PrimaryPart が設定されていません。物理によって作成するモデルには、 Studio 内またはスクリプト内でこのプロパティを手動で設定する必要があります。如果モデル内のパーツが移動されている場合でも、ピボッ
このプロパティを設定すると、BasePart がモデルの子である必要があります。Model.PrimaryPart がモデ
モデルの一般的なルールは、次のとおりです:
- モデルのパーツが物理的な関節などを通じて接続されるモデルは、WeldConstraints またはMotor6Ds などのプライマリパーツを割り当てる必要があります。たとえば、Roblox キャラクターモデルは、デ
- スクリプトが明示的に移動しない限り、1設定するの場所に留まる静的モデル (通常 Anchored ) は、Model.PrimaryPart を必要としません。また、1つのセットを持つことが多くの場合、利益があることはありません。
コードサンプル
-- Create a dice model with two halves and attach them together
local diceModel = Instance.new("Model")
diceModel.Name = "ChanceCube"
local diceTop = Instance.new("Part")
diceTop.Size = Vector3.new(4, 2, 4)
diceTop.Position = Vector3.new(0, 1, 0)
diceTop.Color = Color3.new(0, 0, 1)
diceTop.Parent = diceModel
local diceBottom = diceTop:Clone()
diceBottom.Position = Vector3.new(0, -1, 0)
diceBottom.Color = Color3.new(1, 0, 0)
diceBottom.Parent = diceModel
local weld = Instance.new("WeldConstraint")
weld.Part0 = diceTop
weld.Part1 = diceBottom
weld.Parent = diceModel
-- Put the dice up in the air above the workspace origin (does not require a primary part)
diceModel.Parent = workspace
diceModel:PivotTo(CFrame.new(0, 10, 0))
-- Assign the primary part before physical simulation
-- Without this line, the script will always output the same thing and the bounding box of the model will not change orientation
diceModel.PrimaryPart = diceTop
-- Wait a bit before rolling the dice (let it settle onto the floor)
for i = 5, 1, -1 do
print("Rolling dice in...", i)
task.wait(1)
end
diceTop:ApplyAngularImpulse(Vector3.new(15000, 1000, 5000))
diceTop:ApplyImpulse(Vector3.new(0, 3000, 0))
task.wait(1)
-- Wait for the roll to complete
while diceTop.AssemblyLinearVelocity.Magnitude > 0.1 or diceTop.AssemblyAngularVelocity.Magnitude > 0.1 do
task.wait()
end
-- Get the dice orientation, impacted by the primary part
local orientation = diceModel:GetBoundingBox()
if orientation.YVector.Y > 0.5 then
print("It's the boy!")
else
print("It's his mother!")
end
Scale
このプロパティをプロパティパネルに設定すると、Model/ScaleTo がモデルに呼び出されたように、モデルのスケールサイズをスケールするために、モデル内のすべての子孫インスタンスをスケールすることになります。
このプロパティは Studio でのみ利用可能であり、Script または LocalScript で使用するとエラーが発生します。Model/ScaleTo および 1>Model/GetScale1> はスクリプトから使用する必要があります。
WorldPivot
このプロパティは、Model のピボットが、Class.Model.PrimaryPart を持つことがない、 Class.Model.PrimaryPart</
For a newly created Model , its pivot will be treated as the center of the bounding box of its contents until the first time its Model.WorldPivot property is se設定する. Once the world pivot is set for the first time, it is impossible to restore this initial behavior.
最も一般的な場合は、Studio ツールを使用してモデルを移動するか、PVInstance:PivotTo() やModel:MoveTo() などのモデル移動機能を使用して、世界をピボットし、この新しいモデルの動作を終了するでしょう。
この動作の目的は、Lua コードが新しいモデルを作成し、親オブジェクトに対して親オブジェクトを作成することで、コードを理解したピボットを得ることです。コードでモデルを作成するたびに、Model.WorldPivot を明示的に設定する必要はありません。
local model = Instance.new("Model")workspace.BluePart.Parent = modelworkspace.RedPart.Parent = modelmodel.Parent = workspaceprint(model:GetPivot()) -- Currently equal to the center of the bounding box containing "BluePart" and "RedPart"model:PivotTo(CFrame.new(0, 10, 0)) -- This works without needing to explicitly set "model.WorldPivot"
コードサンプル
local function resetPivot(model)
local boundsCFrame = model:GetBoundingBox()
if model.PrimaryPart then
model.PrimaryPart.PivotOffset = model.PrimaryPart.CFrame:ToObjectSpace(boundsCFrame)
else
model.WorldPivot = boundsCFrame
end
end
resetPivot(script.Parent)
方法
GetBoundingBox
この関数は、 BasePart 子を含むすべての Model のボリュームの説明を返します。ボリュームの方向は、 <
モデルに PrimaryPart がありませんので、バインディングボックスは世界の軸に沿って配置されます。
local model = workspace.Modellocal part = workspace.Partlocal orientation, size = model:GetBoundingBox()-- モデルの境界ボックスと同じサイズと位置のパーツをサイズ変更して配置するpart.Size = sizepart.CFrame = orientation
戻り値
GetExtentsSize
Class.Model 内のすべての Model を含む最小の境界ボックスのサイズを返します。 Model.PrimaryPart が存在する場合、境界ボックスはその部分に�
この関数は、最小限のバウンドボックスのサイズだけを返し、開発者はバウンドボックスの位置を取得するために自分のメソッドを使用する必要があります。
戻り値
コードサンプル
local model = Instance.new("Model")
model.Parent = workspace
local RNG = Random.new()
for _ = 1, 5 do
local part = Instance.new("Part")
part.Anchored = true
part.Size = Vector3.new(RNG:NextNumber(0.05, 5), RNG:NextNumber(0.05, 5), RNG:NextNumber(0.05, 5))
part.Parent = model
end
print(model:GetExtentsSize())
GetPersistentPlayers
このメソッドが Script から呼び出されると、このモデルの持続するすべての Player オブジェクトを返します。 LocalScript から呼び出されると、このメソッドは、このモデルが持続する 2>Class.Players.LocalPlayer|LocalPlayer2> のみをチェックします。
戻り値
このモデルオブジェクトが持続するすべての Player オブジェクトが含まれるテーブル。
GetScale
モデルには、新しく作成されたモデルと変更されるモデルの両方で持続的なキャノニカルスケールファクターが含まれています。この機能は、Model/ScaleTo を呼び出してモデルのキャノニカルスケールファクターを更新するときに返す現在のキャノニカルスケールファクターを返します。
現在のスケールファクターは、直接 インスタンスのサイズに影響を与えません。これは、コンテンツの作成とスクリプトの作成の目的で、モデルのサイズをオリジナルサイズに拡大/縮小するために使用されます。
ScaleTo(x) コールの直後に ScaleTo(x) を呼び出すと、モデルのオリジナルサイズ情報が ScaleTo(1) のオリジナルサイズ情報と同じようにキャッシ
スケールファクターはエンジンの動作に1つ影響を与えます:スケールファクターは、モデルのスケールに対するエンジンの動作を1つに影響させます:モデルのスケールに対して再生されるアニメーションを正しく再生するために、そのモデルの下の animations のジョイントオフセットにモデルのスケールファクタ
戻り値
モデルの現在のスケールファクター。
コードサンプル
local CollectionService = game:GetService("CollectionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Find all the models with the tag we want to replace
local items = CollectionService:GetTagged("Tree")
local newModel = ReplicatedStorage.FancyTreeReplacementModel
for _, item in items do
-- Make the new item and scale / position it where the old one was
local newItem = newModel:Clone()
newItem:ScaleTo(item:GetScale())
newItem:PivotTo(item:GetPivot())
-- Add the same tag to the replacement
CollectionService:AddTag(newItem, "Tree")
-- Delete the old item and parent the new one
newItem.Parent = item.Parent
item:Destroy()
end
MoveTo
Class.Model.PrimaryPart|PrimaryPart を指定された位置に移動します。MoveTo() の根部分が指定されていない場合は、モデルの根部分が使用されますが、根部分は決定的ではないため、Class.Model:MoveTo()|MoveTo() を使用するときは常にプライマリ部分を設定することをお勧
モデルが移動する必要がある場合、例えば Terrain または他の BaseParts など、モデルは邪魔物がないように垂直に移動します。この動作が望ましくない場合は、PVInstance:PivotTo() を使用する必要があります。
Class.Model:MoveTo()|MoveTo() でモデルを移動すると、ローテーションは保持されません。TranslateBy() または PVInstance:PivotTo() を使用することをお勧めします。1> Class.Model:RotateTo()1> がモデルの現在の回転を保持す
パラメータ
戻り値
コードサンプル
local START_POSITION = Vector3.new(-20, 10, 0)
local END_POSITION = Vector3.new(0, 10, 0)
local model = Instance.new("Model")
model.Parent = workspace
local part1 = Instance.new("Part")
part1.Size = Vector3.new(4, 4, 4)
part1.Position = START_POSITION
part1.Anchored = true
part1.BrickColor = BrickColor.new("Bright yellow")
part1.Parent = model
local part2 = Instance.new("Part")
part2.Size = Vector3.new(2, 2, 2)
part2.Position = START_POSITION + Vector3.new(0, 3, 0)
part2.Anchored = true
part2.BrickColor = BrickColor.new("Bright blue")
part2.Parent = model
model.PrimaryPart = part1
model.Parent = workspace
local obstruction = Instance.new("Part")
obstruction.Name = "Obstruction"
obstruction.Size = Vector3.new(10, 10, 10)
obstruction.Position = Vector3.new(0, 10, 0)
obstruction.Anchored = true
obstruction.BrickColor = BrickColor.new("Bright green")
obstruction.Parent = workspace
task.wait(3)
model:MoveTo(END_POSITION)
ScaleTo
モデルには、持続的なスケールファクターが含まれており、新しく作成されたモデルの場合、1 で始まります。この機能は、モデルをスケールファクターの 1 の位置のまわりに拡大/縮小します。これを実現するには、2つのことを行います:
- モデルの現在のスケールファクターを指定した値に設定します。
- すべての子孫インスタンスに対してサイズと位置を再設定
場所のスケーリングは、ピボット場所で行われます。
子孫のインスタンスの「幾何学」プロパティはすべてスケールされます。これには明らかに部品のサイズが含まれますが、以下にスケールされるプロパティの他の例があります:
- ジョイントの長さは、WeldConstraints 、および Class.Rope|Ropes など
- 物理的速度と力、例えば Hinge.MaxServoTorque
- パーティクルエミッターのサイズなど、視覚プロパティ
- 他の長さプロパティ like Sound.RollOffMinDistance
パラメータ
戻り値
TranslateBy
Class.Model を Datatype.Vector3 のオフセットを保持しながら シフトすると、モデルのオリエンテーションを保持します。如果 他の Class.BasePart または Class.Terrain が新しい位置に既に存在する場合は、1> Class.Model は1>
翻訳はオブジェクトスペースではなく、ワールドスペースに適用されます。これは、モデルのパーツが異なる方向に向きている場合でも、標準の軸に沿って移動することを意味します。
パラメータ
戻り値
コードサンプル
local START_POSITION = Vector3.new(-20, 10, 0)
local END_POSITION = Vector3.new(0, 10, 0)
local model = Instance.new("Model")
local part1 = Instance.new("Part")
part1.Size = Vector3.new(4, 4, 4)
part1.CFrame = CFrame.new(START_POSITION) * CFrame.Angles(0, math.rad(45), 0)
part1.Anchored = true
part1.BrickColor = BrickColor.new("Bright yellow")
part1.Parent = model
local part2 = Instance.new("Part")
part2.Size = Vector3.new(2, 2, 2)
part2.CFrame = part1.CFrame * CFrame.new(0, 3, 0)
part2.Anchored = true
part2.BrickColor = BrickColor.new("Bright blue")
part2.Parent = model
model.PrimaryPart = part1
model.Parent = workspace
local obstruction = Instance.new("Part")
obstruction.Name = "Obstruction"
obstruction.Size = Vector3.new(10, 10, 10)
obstruction.Position = Vector3.new(0, 10, 0)
obstruction.Transparency = 0.5
obstruction.Anchored = true
obstruction.BrickColor = BrickColor.new("Bright green")
obstruction.Parent = workspace
task.wait(3)
-- use TranslateBy to shift the model into the obstruction
model:TranslateBy(END_POSITION - START_POSITION)