Class
Model
Models are container objects, meaning they group objects together. They are
best used to hold collections of BaseParts and have a number
of functions that extend their functionality.
Models are container objects, meaning they group objects together. They are
best used to hold collections of BaseParts and have a number
of functions that extend their functionality.
Models are intended to represent geometric groupings. If your grouping has
no geometric interpretation, for instance a collection of
Scripts, use a Folder instead.
Models whose constituent parts are joined together with joints (so that they
can move around or be destroyed via physics simulation) usually have a
PrimaryPart set, as it specifies which part within
the model the pivot and bounding box will "follow" as the model moves. Static
models which stay in one place do not benefit from having a primary part set.
Models have a wide range of applications, including Roblox player characters. They also have a number of unique behaviors that are important to keep in mind:
- When a
Humanoidand aPartnamed Head are parented under a model, a name/health GUI will appear over the model; see Character Name/Health Display for details. - If a part's position on the Y axis hits the
Workspace.FallenPartsDestroyHeightvalue, and it was the last object inside of aModel, the model will be destroyed as well. - When used in a place with
Workspace.StreamingEnabledset to true, the value ofModelStreamingModecontrols various behaviors around how the model and any descendants are replicated and/or removed from clients. In addition, the value ofLevelOfDetailimpacts rendering of the model.
As with all Instance types, the fact that a parent Model is
replicated to a client does not guarantee that all its children are
replicated. This is particularly important if these instances are being
accessed by code running on the client, such as in a LocalScript.
Using ModelStreamingMode with values such as
Atomic can ensure that the entire model and all of
its descendants are present if the parent model exists on the client, or you
can use WaitForChild() when atomicity is not
desired.
Properties 5#
LevelOfDetailModelLevelOfDetail | Sets the level of detail on the model for experiences with instance streaming enabled.ReadSafe |
ModelStreamingModeModelStreamingMode | Controls the model streaming behavior on Models when
instance streaming is enabled.ReadSafe |
PrimaryPartBasePart | The primary part of the Model, or nil if not explicitly set.ReadSafe |
Scalefloat | Editor-only property used to scale the model around its pivot. Setting
this property will move the scale as though Model:ScaleTo() was
called on it.ReadSafeNotReplicatedNotScriptable |
WorldPivotCFrame | Determines where the pivot of a Model which does not have a
set Model.PrimaryPart is located.ReadSafeNotReplicated |
LevelOfDetail: ModelLevelOfDetail#
ReadSafe
Sets the level of detail on the model for experiences with instance streaming enabled. Composite or imposter meshes do not support physics, collision detection, or raycasting.
When set to StreamingMesh, a lower resolution
"imposter" mesh (colored, coarse mesh that wraps around all child parts of
the model) renders outside the streaming radius. Does not support
textures.
When set to SLIM, a SLIM model (Scalable
Lightweight Interactive Model) renders a composite of all child parts at
progressively lower resolutions at distances based on the streaming
radius. This greatly improves visual quality over
StreamingMesh.
When set to Disabled or
Automatic, lower resolution meshes will not be
displayed.
ModelStreamingMode: ModelStreamingMode#
ReadSafe
Controls how Models are streamed in and out when instance
streaming is enabled. Behavior
depends on the selected enum. Has no effect when streaming is not enabled.
This property should only be changed in Studio via the
Properties window when streaming is
enabled, or in Scripts, but never in
LocalScripts (doing so can result in undefined
behavior).
PrimaryPart: BasePart#
ReadSafe
Points to the primary part of the Model. The primary part is the
BasePart that acts as the physical reference for the pivot of the
model. That is, when parts within the model are moved due to physical
simulation or other means, the pivot will move in sync with the primary
part.
Note that Models do not have PrimaryPart set by default.
If you are creating a model that needs to be acted upon by physics, you
should manually set this property in Studio or within a script. If the
primary part is not set, the pivot will remain at the same location in
world space, even if parts within the model are moved.
Also note that when setting this property, it must be a BasePart
that is a descendant of the model. If you try to set
Model.PrimaryPart to a BasePart that is not a
descendant of the model, it will be set to that part but reset to nil
during the next simulation step — this is legacy behavior to support
scripts which assume they can temporarily set the primary part to a
BasePart which isn't a descendant of the model.
The general rule for models is that:
- Models whose parts are joined together via physical joints such as
WeldConstraintsorMotor6Dsshould have a primary part assigned. For example, Roblox character models have theirModel.PrimaryPartset to the HumanoidRootPart by default. - Static (usually
Anchored) models which stay in one place unless a script explicitly moves them don't require aModel.PrimaryPartand tend not to benefit from having one set.
Scale: float#
NotReplicatedNotScriptableReadSafe
Setting this property in the Properties window will scale the model as
though Model:ScaleTo() was called on it, scaling all descendant
Instances in the model, such as materials, images, and the 3D geometry of
parts, so that the model has the specified scale factor relative to its
original size.
This property is only available in Studio and will throw an error if used
in a Script or LocalScript. Model:ScaleTo() and
Model:GetScale() should be used from scripts.
WorldPivot: CFrame#
NotReplicatedReadSafe
This property determines where the pivot of a Model which does
not have a set Model.PrimaryPart is located. If the
Model does have a PrimaryPart, the
pivot of the Model is equal to the pivot of that primary part
instead, and this WorldPivot property is ignored.
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 set. Once the world pivot is set for
the first time, it is impossible to restore this initial behavior.
Most commonly, moving the model with the Studio tools, or with model
movement functions such as PVInstance:PivotTo() and
Model:MoveTo(), will set the world pivot and thus end this new
model behavior.
The purpose of this behavior is to allow Luau code to get a sensible pivot
simply by creating a new model and parenting objects to it, avoiding the
need to explicitly set Model.WorldPivot every time you create a
model in code.
Methods 21#
| AddPersistentPlayer | Sets this model to be persistent for the specified player.
ModelStreamingMode must be set to
PersistentPerPlayer for behavior to be changed
as a result of addition. |
| BreakJoints | Breaks connections between BaseParts, including surface connections with
any adjacent parts, WeldConstraints and all
Welds and other JointInstances. |
| breakJoints | Deprecated |
| GetBoundingBox | Returns a description of a volume that contains all parts of a Model. |
| GetExtentsSize | Returns the size of the smallest bounding box that contains all of the
BaseParts in the Model, aligned with the
Model.PrimaryPart if it is set. |
| GetModelCFrame | This value historically returned the CFrame of a central position in the model.Deprecated |
| GetModelSize | Returns the Vector3 size of the Model.Deprecated |
| GetPersistentPlayers | Returns all the Player objects that this model object is
persistent for. Behavior varies based on whether this method is called
from a Script or a LocalScript. |
| GetPrimaryPartCFrame | Returns the CFrame of the model's Model.PrimaryPart.
This function will throw an error if no primary part exists for the
Model. |
| GetScale | Returns the canonical scale of the model, which defaults to 1 for newly
created models and will change as it is scaled via
Model:ScaleTo(). |
| MakeJoints | Goes through all BaseParts in the Model. If any
part's side has a SurfaceType that can make a joint it will create a joint
with any adjacent parts.Deprecated |
| makeJoints | Deprecated |
| move | Deprecated |
| MoveTo | Moves the PrimaryPart to the given position. If
a primary part has not been specified, the root part of the model will be
used. |
| moveTo | Deprecated |
| RemovePersistentPlayer | Makes this model no longer persistent for the specified player.
ModelStreamingMode must be set to
PersistentPerPlayer for behavior to be changed
as a result of removal. |
| ResetOrientationToIdentity | Resets the rotation of the model's parts to the previously set identity
rotation, which is done through the Model:SetIdentityOrientation()
method.Deprecated |
| ScaleTo | Sets the scale factor of the model, adjusting the sizing and location of all descendant Instances such that they have that scale factor relative to their initial sizes and locations when scale factor was 1. |
| SetIdentityOrientation | Sets the identity rotation of the given model, allowing you to reset the
rotation of the entire model later, through the use of the
ResetOrientationToIdentity method.Deprecated |
| SetPrimaryPartCFrame | Sets the BasePart.CFrame of the model's Model.PrimaryPart.
All other parts in the model will also be moved and will maintain their
orientation and offset respective to the Model.PrimaryPart. |
| TranslateBy | Shifts a Model by the given Vector3 offset, preserving
the model's orientation. If another BasePart or Terrain
already exists at the new position then the Model will overlap
said object. |
AddPersistentPlayer(playerInstance: Player = nil): ()#
Sets this model to be persistent for the specified player. Persistent models stay present for the player regardless of streaming settings or conditions.
ModelStreamingMode must be set to
PersistentPerPlayer for behavior to be changed
as a result of addition.
Returns
()
BreakJoints(): ()#
Deprecated
Breaks connections between BaseParts, including surface connections with
any adjacent parts, WeldConstraints, and all
Welds and other JointInstances.
When BreakJoints is used on a Player character Model, the
character's Humanoid will die as it relies on the Neck joint.
Note that although joints produced by surface connections with adjacent
Parts can technically be recreated using Model:MakeJoints(), this
will only recreate joints produced by surfaces. Developers should not rely
on this as following the joints being broken parts may no longer be in
contact with each other.
Returns
()
breakJoints(): ()#
DeprecatedDeprecated
Deprecated. This deprecated function is a variant of Model:BreakJoints() which
should be used instead.
Returns
()
GetBoundingBox(): Tuple#
This function returns a description of a volume that contains all
BasePart children within a Model. The volume's orientation
is based on the orientation of the PrimaryPart,
and matches the selection box rendered in Studio when the model is
selected. Mirroring the behavior of Terrain:FillBlock(), it
returns a CFrame representing the center of that bounding box
and a Vector3 representing its size. The size may be inaccurate
at runtime if physics constraints are acting upon the parts within the
Model.
The orientation of the bounding box matches the orientation of the
Pivot - either the pivot of the
PrimaryPart (if present) or the
WorldPivot of the model.
GetExtentsSize(): Vector3#
Returns the size of the smallest bounding box that contains all of the
BaseParts in the Model. The orientation matches
the orientation of the Pivot - either the
pivot of the PrimaryPart (if present) or the
WorldPivot of the model.
Note this function only returns the size of the smallest bounding box, and the developer must employ their own method to obtain the position of the bounding box.
GetModelCFrame(): CFrame#
DeprecatedDeprecated
Deprecated. This function has been deprecated as it did not provide reliable results.
You can instead use Model:GetPrimaryPartCFrame() to retrieve the
CFrame of the model's primary part.
This value historically returned the CFrame of a central position in the model.
GetModelSize(): Vector3#
DeprecatedDeprecated
Deprecated. This item is deprecated. Do not use it for new work. Developers can
instead use Model.GetExtentsSize.
GetPersistentPlayers(): List<Player>#
When this method is called from a Script, it returns all the
Player objects that this model is persistent for. When called from
a LocalScript, this method only checks if this model is persistent
for the LocalPlayer.
Returns
List<Player>— A table with all thePlayerobjects that this model object is persistent for.
GetPrimaryPartCFrame(): CFrame#
Deprecated
This function has been superseded by PVInstance:GetPivot() which
acts as a replacement and does not change your code's behavior. Use
PVInstance:GetPivot() for new work and migrate your existing
Model:GetPrimaryPartCFrame() calls when convenient.
Returns the CFrame of the model's Model.PrimaryPart.
This function is equivalent to the following.
Model.PrimaryPart.CFrame
Note this function will throw an error if no primary part exists for the
Model. If this behavior is not desired developers can do the
following, which will be equal to nil if there is no primary part.
local cFrame = Model.PrimaryPart and Model.PrimaryPart.CFrame
Returns
CFrame— TheCFrameof the model'sModel.PrimaryPart.
GetScale(): float#
Models contain a persistent canonical scale factor, which starts out at 1
for newly created models and changes as the model is scaled by calling
Model:ScaleTo(). This function returns the current canonical scale
factor of the model.
The current scale factor does not directly impact the size of Instances under the model. It is used for content authoring and scripting purposes to remember how the model has been scaled relative to its original size.
Within a given session, the model will cache the precise original size
information of the descendant Instances after the first
Model:ScaleTo() call. This means that calling
ScaleTo(x) followed by
ScaleTo(1) will get you back exactly the
original configuration of the model with no floating point drift. Avoiding
floating point drift is the motivation for having a ScaleTo function
instead of a ScaleBy function.
The scale factor does impact engine behavior in one way: The scale factor
of a model will be applied to joint offsets of
Animations played on an AnimationController
under that model, so that animated rigs will correctly play back
animations even when scaled.
Returns
float— The current canonical scale factor of the model.
MakeJoints(): ()#
DeprecatedDeprecated
Deprecated. This joint type has been deprecated. Don't use it for new work. Use
WeldConstraints and
HingeConstraints instead.
SurfaceType based joining is deprecated. Don't use MakeJoints for new
projects. Use WeldConstraints and
HingeConstraints instead.
Goes through all Parts in the Model and creates
joints between the specified Parts and any planar touching surfaces,
depending on the parts' surfaces.
- Smooth surfaces will not create joints
- Glue surfaces will create a
Gluejoint - Weld will create a
Weldjoint with any surface except for Unjoinable - Studs, Inlet, or Universal will each create a
Snapjoint with either of other the other two surfaces (e.g. Studs with Inlet and Universal) - Hinge and Motor surfaces create
RotateandRotateVjoint instances
This function doesn't work if the Part is not a descendant of
Workspace. Therefore, you must first ensure the Model is parented
to Workspace before using MakeJoints.
Returns
()
makeJoints(): ()#
DeprecatedDeprecated
Deprecated. This deprecated function is a variant of Model:MakeJoints() which
should be used instead.
Returns
()
move(location: Vector3): ()#
DeprecatedDeprecated
Deprecated. This item has been superseded by Model:MoveTo() which should be
used in all new work
| Name | Type | Default | Description |
|---|---|---|---|
location | Vector3 |
Returns
()
MoveTo(position: Vector3): ()#
Moves the PrimaryPart to the given position. If
a primary part has not been specified, the root part of the model will be
used, but the root part is not deterministic and it is recommended that
you always set a primary part when using MoveTo().
If there are any obstructions where the model is to be moved, such as
Terrain or other BaseParts, the model will be
moved vertically upward until there is nothing in the way. If this
behavior is not desired, PVInstance:PivotTo() should be used
instead.
Note that rotation is not preserved when moving a model with
MoveTo(). It is recommended to use either
TranslateBy() or PVInstance:PivotTo()
if the current rotation of the model needs to be preserved.
Returns
()
moveTo(location: Vector3): ()#
DeprecatedDeprecated
Deprecated. This deprecated function is a variant of Model:MoveTo() which
should be used instead.
| Name | Type | Default | Description |
|---|---|---|---|
location | Vector3 |
Returns
()
RemovePersistentPlayer(playerInstance: Player = nil): ()#
Makes this model no longer persistent for the specified player. This does
not guarantee the model will immediately be removed for the player; after
calling this method, the model will be treated as
Atomic for that player and will remain present
as long as it is within the target streaming radius.
ModelStreamingMode must be set to
PersistentPerPlayer for behavior to be changed
as a result of removal.
| Name | Type | Default | Description |
|---|---|---|---|
playerInstance | Player | nil | The Player to make this model no longer persistent for. |
Returns
()
ResetOrientationToIdentity(): ()#
DeprecatedDeprecated
Deprecated. This function has been deprecated; it remains to prevent legacy scripts from throwing errors, but it does nothing when called.
Resets the rotation of the model's parts to the previously set identity
rotation, which is done through the Model:SetIdentityOrientation()
method.
Returns
()
ScaleTo(newScaleFactor: float): ()#
Models contain a persistent canonical scale factor, which starts out at 1 for newly created models. This function scales the model, around the pivot location, relative to how it would look at a scale factor of 1. To accomplish this it does two things:
- Sets the current scale factor of the model to the specified value
- Resizes and repositions all descendant Instances accordingly
The scaling of locations is done around the pivot location.
All "geometric" properties of descendant Instances will be scaled. That obviously includes the sizes of parts, but here are some other examples of properties which are scaled:
- The length of joints like
WeldConstraints, andRopeConstraint - Physical velocities and forces like
HingeConstraint - Visual properties like sizes of particle emitters
- Other length properties like
Sound.RollOffMinDistance
| Name | Type | Default | Description |
|---|---|---|---|
newScaleFactor | float | The new scale factor for the model, which must be a positive non-zero number. A value of 1 represents the model's original size. |
Returns
()
SetIdentityOrientation(): ()#
DeprecatedDeprecated
Deprecated. This function has been deprecated; it remains to prevent legacy scripts from throwing errors, but it does nothing when called.
Sets the identity rotation of the given model, allowing you to reset the
rotation of the entire model later, through the use of the
ResetOrientationToIdentity method.
Returns
()
SetPrimaryPartCFrame(cframe: CFrame): ()#
Deprecated
This function has been superseded by PVInstance:PivotTo() which
acts as a more performant replacement and does not change your code's
behavior. Use PVInstance:PivotTo() for new work and migrate your
existing Model:SetPrimaryPartCFrame() calls when convenient.
Sets the BasePart.CFrame of the model's Model.PrimaryPart.
All other parts in the model will also be moved and will maintain their
orientation and offset respective to the Model.PrimaryPart.
Note, this function will throw an error if no Model.PrimaryPart
exists for the model. This can cause issues if, for example, the primary
part was never set or has been destroyed.
Returns
()
TranslateBy(delta: Vector3): ()#
Shifts a Model by the given Vector3 offset, preserving
the model's orientation. If another BasePart or Terrain
already exists at the new position then the Model will overlap
said object.
The translation is applied in world space rather than object space, meaning even if the model's parts are orientated differently it will still move along the standard axis.
Returns
()
Inherited members#
Inherited from Instance 58
Properties (10)
Archivable, archivable, Capabilities, IsInSandbox, Name, Parent, PredictionMode, RobloxLocked, Sandboxed, UniqueId
Methods (39)
AddTag, children, ClearAllChildren, Clone, clone, Destroy, destroy, FindFirstAncestor, FindFirstAncestorOfClass, FindFirstAncestorWhichIsA, FindFirstChild, findFirstChild, FindFirstChildOfClass, FindFirstChildWhichIsA, FindFirstDescendant, GetActor, GetAttribute, GetAttributeChangedSignal, GetAttributes, GetChildren, getChildren, GetDebugId, GetDescendants, GetFullName, GetStyled, GetStyledPropertyChangedSignal, GetTags, HasTag, IsAncestorOf, IsDescendantOf, isDescendantOf, IsPropertyModified, QueryDescendants, Remove, remove, RemoveTag, ResetPropertyToDefault, SetAttribute, WaitForChild