Class
WorldRoot
NotCreatable
Base class for handling physics simulation and 3D spatial queries.
This base class provides an API for any instance intended for handling 3D
spatial queries and simulation, such as Workspace and
WorldModel.
Methods 29#
| ArePartsTouchingOthers | Returns true if any of the given BasePart are touching any other
parts. |
| Blockcast | Casts a block shape in a given direction and returns a
RaycastResult if the shape hits a BasePart or
Terrain cell.Safe |
| BulkMoveTo | Moves an array of BaseParts to an array of
CFrames. |
| CollisionGroupsAreCollidable | Returns whether the two groups will collide in this world. |
| CollisionGroupSetCollidable | Sets the collision status between two groups in this world. |
| FindPartOnRay | Returns the first BasePart or Terrain cell intersecting
with the given Ray.Deprecated |
| findPartOnRay | Deprecated |
| FindPartOnRayWithIgnoreList | Returns the first BasePart or Terrain cell intersecting
with the given Ray that isn't in, nor is a descendant of an
object in, the given ignore list.Deprecated |
| FindPartOnRayWithWhitelist | Returns the first BasePart or Terrain cell intersecting
with the given Ray that is in, or is a descendant of an object
in, the given inclusion list.Deprecated |
| FindPartsInRegion3 | Returns an array of BaseParts in the given
Region3.Deprecated |
| findPartsInRegion3 | Deprecated |
| FindPartsInRegion3WithIgnoreList | Returns an array of BaseParts in the given
Region3 that aren't in, or a descendant of an entry in, the
given ignore list.Deprecated |
| FindPartsInRegion3WithWhiteList | Returns an array of BaseParts in the given
Region3 that are in, or descendant of an entry in, the given
inclusion list.Deprecated |
| GetMaxCollisionGroups | Returns the maximum number of collision groups in this world. |
| GetPartBoundsInBox | Returns an array of parts whose bounding boxes overlap a given box.SafeCustomLuaState |
| GetPartBoundsInRadius | Returns an array of parts whose bounding boxes overlap a given sphere.SafeCustomLuaState |
| GetPartsInPart | Returns an array of parts whose occupied space is shared with the given part.SafeCustomLuaState |
| GetRegisteredCollisionGroups | Returns a table with info on all of this world's collision groups. |
| IKMoveTo | Moves the specified part to the specified location via inverse kinematics rather than moving it there directly, to ensure any joints, constraints, or collisions that part is participating in remain physically satisfied.PluginSecurity security |
| IsCollisionGroupRegistered | Checks if a collision group is registered in this world. |
| IsRegion3Empty | Returns a bool indicating whether there are no BaseParts
within the given Region3.Deprecated |
| IsRegion3EmptyWithIgnoreList | Returns a boolean indicating whether there are no
BaseParts within the given Region3, ignoring
any BaseParts that are descendants of the objects within
the given ignore list.Deprecated |
| Raycast | Casts a ray using an origin, direction, and optional
RaycastParams, then returns a RaycastResult if an
eligible object or terrain intersects the ray.Safe |
| RegisterCollisionGroup | Registers a new collision group in this world with the given name. |
| RenameCollisionGroup | Renames specified collision group in this world. |
| Shapecast | Casts the shape of a given BasePart in a direction and returns a
RaycastResult if the shape hits a BasePart or
Terrain cell. |
| Spherecast | Casts a spherical shape in a given direction and returns a
RaycastResult if the shape hits a BasePart or
Terrain cell.Safe |
| StepPhysics | Advances the simulation for parts in the world forward based on a
specified time increment and an optional set of
BaseParts.PluginSecurity security |
| UnregisterCollisionGroup | Unregisters the collision group for the given name in this world. |
ArePartsTouchingOthers(partList: Instances, overlapIgnored: float = 0.000199999995): boolean#
ArePartsTouchingOthers returns true if at least one of the given
BasePart are touching any other parts. Two parts are considered
"touching" if they are within the distance threshold, overlapIgnored.
If no parts are provided, false is returned.
| Name | Type | Default | Description |
|---|---|---|---|
partList | Instances | A list of parts checks to see if any parts in the list are touching any parts not in the list. | |
overlapIgnored | float | 0.000199999995 | The part overlap threshold in studs that is ignored before parts are considered to be touching. |
Returns
boolean— True if and only if any of thepartsinpartListare touching any other parts (parts not in the partList). False if no parts are passed.
Blockcast(cframe: CFrame, size: Vector3, direction: Vector3, params: RaycastParams = RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}): RaycastResult?#
Safe
Casts a block shape in a given direction and returns the first collision
with a BasePart or Terrain cell. This is analogous to how
WorldRoot:Raycast() casts a linear ray in a direction to find a
collision, but it uses a 3D shape instead of a ray.
Unlike WorldRoot:GetPartsInPart(), this method does not detect
BaseParts that initially intersect the shape.
If a hit is detected, a RaycastResult is returned containing
the hit information. The Distance
property represents the distance the shape has to travel to find a hit,
and the Position property represents the
intersection point that causes the hit.
This method throws an error if it is passed invalid CFrame,
size, or direction inputs.
| Name | Type | Default | Description |
|---|---|---|---|
cframe | CFrame | The initial position and rotation of the cast block shape. | |
size | Vector3 | The size of the cast block shape in studs. The maximum size is 512 studs. | |
direction | Vector3 | Direction of the shapecast, with the magnitude representing the maximum distance the shape can travel. The maximum distance is 1024 studs. | |
params | RaycastParams | RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}} | An object used to specify hit eligibility in the shapecast operation.
If not provided, default values are used where all parts are
considered and Terrain water is not ignored. |
Returns
RaycastResult?— Contains the result of the shapecast operation, ornilif no eligibleBasePartorTerraincell was hit.
BulkMoveTo(partList: Instances, cframeList: Array, eventMode: BulkMoveMode = FireAllEvents): ()#
This function moves an array of BaseParts to an array of
CFrames without necessarily firing the default property
Changed events. This provides a very fast way to
move large numbers of parts, as you don't have to pay the cost of separate
property sets for each individual part.
Both partList and cframeList are sequential arrays (Luau tables with
integer indices starting at 1), not dictionaries. Each part at index i
in partList is moved to the CFrame at index i in
cframeList. The arrays must contain the same number of entries.
local Workspace = game:GetService("Workspace")
local partList = { Workspace.Part1, Workspace.Part2 }
local cframeList = { CFrame.new(0, 5, 0), CFrame.new(10, 5, 0) }
Workspace:BulkMoveTo(partList, cframeList, Enum.BulkMoveMode.FireCFrameChanged)The third argument allows you to further optimize the movement operation.
By default, the Changed event of each part fires
for Position,
Orientation, and
CFrame. However, if you specify
FireCFrameChanged as the third argument, only the
Changed event for the
CFrame property will fire.
Note that you should only use this function if you're sure that part
movement is a bottleneck in your code. Simply setting the
CFrame property of individual parts and welded
models is fast enough in the majority of cases.
| Name | Type | Default | Description |
|---|---|---|---|
partList | Instances | An array of BaseParts to be moved. Each entry is
matched by index to the corresponding entry in cframeList. | |
cframeList | Array | An array of CFrames that the parts will be moved to,
matched by index to partList. Both arrays must be the same length. | |
eventMode | BulkMoveMode | FireAllEvents | An BulkMoveMode enum specifying which
Changed events fire during the move. Default is
FireAllEvents. |
Returns
()
CollisionGroupsAreCollidable(name1: string, name2: string): boolean#
Returns whether the two specified collision groups will collide in this
world. This method will also return true if either of the groups are
unregistered in this world, as the default collision mask collides with
all groups.
| Name | Type | Default | Description |
|---|---|---|---|
name1 | string | ||
name2 | string |
Returns
boolean
CollisionGroupSetCollidable(name1: string, name2: string, collidable: boolean): ()#
Sets the collision status between two groups in this world. This method
will throw an error if either of the groups is unregistered in this world,
so it's recommended that you confirm each group's registration through
WorldRoot:IsCollisionGroupRegistered() before making this call.
| Name | Type | Default | Description |
|---|---|---|---|
name1 | string | ||
name2 | string | ||
collidable | boolean |
Returns
()
FindPartOnRay(ray: Ray, ignoreDescendantsInstance: Instance = nil, terrainCellsAreCubes: boolean = false, ignoreWater: boolean = false): Tuple#
DeprecatedDeprecated
Deprecated. This function has been deprecated. Use WorldRoot:Raycast() along
with RaycastParams for new work.
FindPartOnRay uses raycasting to
find the first BasePart or Terrain cell intersecting with
a given Ray. This function returns the BasePart or
terrain cell hit, the point of intersection, the surface normal at the
point of intersection, and the associated Material hit.
If the ignoreDescendantsInstance parameter is provided, the raycasting
calculation will ignore the given object and all of its descendants. It
behaves similar to the Mouse.TargetFilter property.
The terrainCellsAreCubes and ignoreWater parameters determine whether
Terrain cells should be treated as cubes or not, and whether water
should be ignored or not.
In order to include or exclude multiple objects and their descendants, use
the WorldRoot:FindPartOnRayWithWhitelist() and
WorldRoot:FindPartOnRayWithIgnoreList() variants.
Notes#
- Theoretically, a ray extends infinitely in one direction. However, the max length of the direction vector on Roblox is 15000 studs.
- The length (magnitude) of the directional vector is important, as parts further away than its length will not be tested.
- If the ray does not intersect anything, the return values will be
niland the point at the end of the ray, respectively. - Parts that are in a collision group that does not collide with the "Default" collision group are ignored implicitly.
| Name | Type | Default | Description |
|---|---|---|---|
ray | Ray | A Ray whose origin and direction define the raycast. | |
ignoreDescendantsInstance | Instance | nil | An Instance whose descendants are ignored in the raycast. |
terrainCellsAreCubes | boolean | false | Whether Terrain cells are treated as full cubes when
calculating intersection. Default is false. |
ignoreWater | boolean | false | Whether Terrain water cells are ignored by the ray. Default is
false. |
findPartOnRay(ray: Ray, ignoreDescendantsInstance: Instance = nil, terrainCellsAreCubes: boolean = false, ignoreWater: boolean = false): Tuple#
DeprecatedDeprecated
Deprecated. This deprecated function is a variant of WorldRoot:FindPartOnRay()
which should be used instead.
| Name | Type | Default | Description |
|---|---|---|---|
ray | Ray | ||
ignoreDescendantsInstance | Instance | nil | |
terrainCellsAreCubes | boolean | false | |
ignoreWater | boolean | false |
Returns
Tuple
FindPartOnRayWithIgnoreList(ray: Ray, ignoreDescendantsTable: Instances, terrainCellsAreCubes: boolean = false, ignoreWater: boolean = false): Tuple#
DeprecatedDeprecated
Deprecated. This function has been deprecated. Use WorldRoot:Raycast() along
with RaycastParams for new work.
This function is a variant of WorldRoot:FindPartOnRay() with the
addition of an ignore list. This lets you ignore certain parts or
Models.
Those looking to include a specific group of objects should instead
use WorldRoot:FindPartOnRayWithWhitelist().
| Name | Type | Default | Description |
|---|---|---|---|
ray | Ray | A Ray whose origin and direction define the raycast. | |
ignoreDescendantsTable | Instances | An array of objects whose descendants are excluded from the raycast. | |
terrainCellsAreCubes | boolean | false | Whether Terrain cells are treated as full cubes when
calculating intersection. Default is false. |
ignoreWater | boolean | false | Whether Terrain water cells are ignored by the ray. Default is
false. |
FindPartOnRayWithWhitelist(ray: Ray, whitelistDescendantsTable: Instances, ignoreWater: boolean = false): Tuple#
DeprecatedDeprecated
Deprecated. This function has been deprecated. Use WorldRoot:Raycast() along
with RaycastParams for new work.
This function is a variant of WorldRoot:FindPartOnRay() with the
addition of an inclusion list. This lets you detect only certain parts or
Models and is particularly useful when, for example, looking
for points of intersection between a ray and a single part.
If a nil value is given in the inclusion list, instances after it will
be disregarded.
Those looking to exclude a specific group of objects should instead
use WorldRoot:FindPartOnRayWithIgnoreList().
FindPartsInRegion3(region: Region3, ignoreDescendantsInstance: Instance = nil, maxParts: int = 20): List<BasePart>#
DeprecatedDeprecated
Deprecated. This function has been deprecated. Use
WorldRoot:GetPartBoundsInBox() along with OverlapParams
for new work.
Returns an array of BaseParts in the given
Region3.
This function takes an optional maxParts parameter (default 20) which
limits the number of BaseParts that can be returned. Once
this number has been reached, the search for BaseParts
will stop. This means some BaseParts may not be returned
even if they are within the Region3
The optional ignoreDescendantsInstance parameter can be used to specify
a specific instance for whom itself and all of its descendants should be
ignored by this function. This can be useful when, for example, looking to
see if any BaseParts are inside a BasePart other
than the BasePart itself.
local min = part.Position - (0.5 * part.Size)
local max = part.Position + (0.5 * part.Size)
local region = Region3.new(min, max)
local parts = worldroot:FindPartsInRegion3(region, part) -- Ignore partThe WorldRoot:FindPartsInRegion3WithIgnoreList() and
WorldRoot:FindPartsInRegion3WithWhiteList() variants of this
method exist to provide specific exclusion and inclusion functionality.
If no BaseParts are found, an empty array will be
returned.
findPartsInRegion3(region: Region3, ignoreDescendantsInstance: Instance = nil, maxParts: int = 20): List<BasePart>#
DeprecatedDeprecated
Deprecated. This deprecated function is a variant of
WorldRoot:FindPartsInRegion3() which should be used instead.
Returns
List<BasePart>
FindPartsInRegion3WithIgnoreList(region: Region3, ignoreDescendantsTable: Instances, maxParts: int = 20): List<BasePart>#
DeprecatedDeprecated
Deprecated. This function has been deprecated. Use
WorldRoot:GetPartBoundsInBox() along with OverlapParams
for new work.
Returns an array of BaseParts in the given
Region3 that aren't in, or a descendant of an entry in, the
given ignore list.
If a nil value is given in the ignore list, instances after this value
will not be ignored. If no BaseParts are found, an empty
array will be returned.
This function is a variant of WorldRoot:FindPartsInRegion3() with
the addition of an ignore list. This allows the developer to exclude
certain BaseParts or Models from the
search. Those looking to find BaseParts in a
Region3 using an inclusion list should use
WorldRoot:FindPartsInRegion3WithWhiteList().
FindPartsInRegion3WithWhiteList(region: Region3, whitelistDescendantsTable: Instances, maxParts: int = 20): List<BasePart>#
DeprecatedDeprecated
Deprecated. This function has been deprecated. Use
WorldRoot:GetPartBoundsInBox() along with OverlapParams
for new work.
Returns an array of BaseParts in the given
Region3 that are in, or descendant of an entry in, the given
inclusion list.
If a nil value is given in the inclusion list, instances after this
value will not be ignored. If no BaseParts are found, an
empty array will be returned.
This function is a variant of WorldRoot:FindPartsInRegion3() with
the addition of an inclusion list. This allows the developer to include
only certain BaseParts or Models in the
search. Those looking to find BaseParts in a
Region3 using an exclusion list should use
WorldRoot:FindPartsInRegion3WithIgnoreList().
GetMaxCollisionGroups(): int#
Returns the maximum number of collision groups the engine supports per world. This value is currently 32.
Returns
int
GetPartBoundsInBox(cframe: CFrame, size: Vector3, overlapParams: OverlapParams = OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}): List<BasePart>#
CustomLuaStateSafe
WorldRoot:GetPartBoundsInBox() returns an array of parts whose
bounding boxes overlap a box whose volume is described using the given
center (CFrame) and size (Vector3).
As emphasized, this spatial query method efficiently considers the volume
of parts' bounding boxes rather than their actual occupied volume. This
may be important when considering cylinders, spheres, unions, and
MeshParts which have non-block shapes. For cases where
accuracy especially matters, use WorldRoot:GetPartsInPart()
instead, or further filter the results of this method yourself.
This method uses a OverlapParams object to describe reusable
portions of the spatial query, such as an inclusion or exclusion list, the
maximum number of parts to query, what
collision group to
use, and whether the query favors an intersected part's
BasePart.CanCollide value over its BasePart.CanQuery
value.
| Name | Type | Default | Description |
|---|---|---|---|
cframe | CFrame | The location of the center of the given box volume to be queried. | |
size | Vector3 | The size of the given box volume to be queried. | |
overlapParams | OverlapParams | OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}} | Contains reusable portions of the spatial query parameters. |
Returns
List<BasePart>— An array ofBasePartswhich matched the spatial query.
GetPartBoundsInRadius(position: Vector3, radius: float, overlapParams: OverlapParams = OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}): List<BasePart>#
CustomLuaStateSafe
WorldRoot:GetPartBoundsInRadius() returns an array of parts whose
bounding boxes overlap a sphere whose volume is described using the
given center (Vector3) and radius (number).
As emphasized, this spatial query method efficiently considers the volume
of parts' bounding boxes rather than their actual occupied volume. This
may be important when considering cylinders, spheres, unions, and
MeshParts which have non-block shapes. For cases where
accuracy especially matters, use WorldRoot:GetPartsInPart()
instead, or further filter the results of this method yourself.
This method uses a OverlapParams object to describe reusable
portions of the spatial query, such as an inclusion or exclusion list, the
maximum number of parts to query, what
collision group to
use, and whether the query favors an intersected part's
BasePart.CanCollide value over its BasePart.CanQuery
value.
| Name | Type | Default | Description |
|---|---|---|---|
position | Vector3 | The location of the center of the given sphere volume to be queried. | |
radius | float | The radius of the given sphere volume to be queried. | |
overlapParams | OverlapParams | OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}} | Contains reusable portions of the spatial query parameters. |
Returns
List<BasePart>— An array ofBasePartswhich matched the spatial query.
GetPartsInPart(part: BasePart, overlapParams: OverlapParams = OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}): List<BasePart>#
CustomLuaStateSafe
WorldRoot:GetPartsInPart() returns an array of parts whose
occupied space is shared with the given part (which must exist in the same
WorldRoot as the parts to be queried). This method can be used in
place of BasePart:GetTouchingParts() and is generally a better
choice.
As noted, this spatial query method considers the exact volume
occupied by the given part using a full geometric collision check. As an
example, a concave/hollow part won't match queried parts within it unless
they actually overlap/touch such a part. For simpler volumes, consider
using WorldRoot:GetPartBoundsInBox() or
WorldRoot:GetPartBoundsInRadius(), as they are less accurate but
perform more efficiently.
This method uses a OverlapParams object to describe reusable
portions of the spatial query, such as an inclusion or exclusion list, the
maximum number of parts to query, what
collision group to
use, and whether the query favors an intersected part's
BasePart.CanCollide value over its BasePart.CanQuery
value.
| Name | Type | Default | Description |
|---|---|---|---|
part | BasePart | The part whose volume is to be checked against other parts. | |
overlapParams | OverlapParams | OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}} | Contains reusable portions of the spatial query parameters. |
Returns
List<BasePart>— An array ofBasePartswhich matched the spatial query.
GetRegisteredCollisionGroups(): Array#
Returns a table with info on all of this world's collision groups. Each value in the returned table is itself a table and containing two members:
| Member | Type | Description |
|---|---|---|
| mask | integer | The collision group's mask; only for internal use. |
| name | string | Name of the collision group. |
Returns
Array
IKMoveTo(part: BasePart, target: CFrame, translateStiffness: float = 0.5, rotateStiffness: float = 0.5, collisionsMode: IKCollisionsMode = OtherMechanismsAnchored): ()#
PluginSecurity security
This function moves the specified part to the specified location via
inverse kinematics
rather than moving it there directly, to ensure any joints,
constraints, or collisions that part is participating
in remain physically satisfied. Currently this function is only available
in Studio to plugins, as it currently conflicts with the
physics of a running game.
Translate stiffness is a number between 0 and 1 specifying how aggressively to match the part's position to the position part of the target CFrame. Rotate stiffness is a number between 0 and 1 specifying how aggressively to match the part's rotation to the rotation part of the target CFrame.
For example:
- If translate stiffness and rotate stiffness are both equal to 1, then the part will be moved exactly to the target CFrame regardless of what physical constraints there are on it.
- If translate stiffness and rotate stiffness are both equal to 0.5, then the part will try to move to exactly the target CFrame, but may be pushed out of the way by physical constraints on it.
- If translate stiffness and rotate stiffness are both equal to 0, then the target CFrame will be ignored and physical constraints will be solved for the object at the position where it was.
| Name | Type | Default | Description |
|---|---|---|---|
part | BasePart | The part being moved. | |
target | CFrame | The location to move the specified part. | |
translateStiffness | float | 0.5 | A number between 0 and 1 specifying how aggressively to match the
part's position to the position part of the target CFrame. |
rotateStiffness | float | 0.5 | A number between 0 and 1 specifying how aggressively to match the
part's rotation to the rotation part of the target CFrame. |
collisionsMode | IKCollisionsMode | OtherMechanismsAnchored | Allows you to specify what objects should be effected by the physical resolution. |
Returns
()
IsCollisionGroupRegistered(name: string): boolean#
Checks if a collision group is registered in this world. It's recommended
that you call this method before calling methods that throw errors for
unregistered collision groups, such as
WorldRoot:CollisionGroupSetCollidable().
| Name | Type | Default | Description |
|---|---|---|---|
name | string |
Returns
boolean
IsRegion3Empty(region: Region3, ignoreDescendentsInstance: Instance = nil): boolean#
DeprecatedDeprecated
Deprecated. This function has been deprecated. Use
WorldRoot:GetPartBoundsInBox() along with OverlapParams
for new work.
IsRegion3Empty returns a bool indicating whether there are no
BaseParts within the given Region3.
The optional ignoreDescendantsInstance parameter can be used to specify
a specific instance for whom itself and all of its descendants should be
ignored by this function. This can be useful when, for example, looking to
see if any BaseParts are inside a BasePart other
than the BasePart itself.
local min = part.Position - (0.5 * part.Size)
local max = part.Position + (0.5 * part.Size)
local region = Region3.new(min, max)
local isPartEmpty = worldroot:IsRegion3Empty(region, part) -- Ignore partIf more than one object and its descendants need to be excluded from the
search, developers should use
WorldRoot:IsRegion3EmptyWithIgnoreList().
This function only returns if a region is empty or not. Developers looking
to find BaseParts in a region should use
WorldRoot:FindPartsInRegion3().
How do Region3 checks work?#
Checking if a part overlaps a Region3 is not a simple process.
It actually is time consuming and complicated. Instead it checks if parts
are roughly in the same area. When this function is called, it figures out
which voxels contain the Region3. It then figures out which
parts might be in those voxels. It does this by comparing the axis-aligned
bounding box (sometimes called the AABB) of the part with the voxels. The
axis-aligned bounding box can be seen in Roblox Studio when a part is
selected.
This means that the area that is inspected by the function may be larger
than the Region3. For this reason it is recommended to make
sure that the Region3 is on the voxel grid. The best way to do
this is by setting the coordinates of the Region3 to multiples
of 4 (since voxels are 4 x 4 x 4 studs).
This method is a fairly quick and easy way to see if any parts are in a
general area. If a game needs to know if parts are exactly in an area,
then BasePart:GetTouchingParts() should be used. There is a higher
cost to using BasePart:GetTouchingParts() since a part is needed
in the WorldRoot and the function takes more time to run.
| Name | Type | Default | Description |
|---|---|---|---|
region | Region3 | The Region3 to be checked. | |
ignoreDescendentsInstance | Instance | nil | An Instance to be ignored. |
Returns
boolean— True if theRegion3is empty.
IsRegion3EmptyWithIgnoreList(region: Region3, ignoreDescendentsTable: Instances): boolean#
DeprecatedDeprecated
Deprecated. This function has been deprecated. Use
WorldRoot:GetPartBoundsInBox() along with OverlapParams
for new work.
Returns a boolean indicating whether there are no
BaseParts within the given Region3, ignoring
any BaseParts that are descendants of the objects within
the given ignore list. If a nil value is given in the ignore list,
instances after this value will not be ignored.
This function only returns if a region is empty or not. Developers looking
to find specific BaseParts in a region should use
WorldRoot:FindPartsInRegion3WithIgnoreList().
This function is a variant of WorldRoot:IsRegion3Empty() with the
addition of an ignore list. In cases where an inclusion list is required
instead, developers should check to see if any parts are returned by
WorldRoot:FindPartsinRegion3WithWhitelist().
| Name | Type | Default | Description |
|---|---|---|---|
region | Region3 | The Region3 to be checked. | |
ignoreDescendentsTable | Instances | An array of objects to be ignored. |
Returns
boolean— True if theRegion3is empty.
Raycast(origin: Vector3, direction: Vector3, raycastParams: RaycastParams = RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}): RaycastResult?#
Safe
Casts a ray using an origin, direction, and optional
RaycastParams. If it finds an eligible BasePart or
Terrain cell, a RaycastResult is returned containing
the results of the operation. If no RaycastParams object is
provided, the defaults are used (all parts are considered and
Terrain water is not ignored).
Note that the length (magnitude) of the directional vector is important,
as objects/terrain further away than its length will not be tested. If
you're using a CFrame to help create the ray components,
consider using CFrame.LookVector as the directional vector and
multiply it by the desired length as shown in the example below. The
maximum length of the direction vector is 15,000 studs.
This method does not use a Ray object, but its origin and
direction components can be borrowed from Ray.Origin and
Ray.Direction.
| Name | Type | Default | Description |
|---|---|---|---|
origin | Vector3 | The origin point of the ray. | |
direction | Vector3 | The directional vector of the ray. Note that the length of this vector matters, as parts/terrain further away than its length will not be tested. | |
raycastParams | RaycastParams | RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}} | An object used to specify hit eligibility in the raycast operation. If
not provided, default values are used where all parts are considered
and Terrain water is not ignored. |
Returns
RaycastResult?— Contains the results of a raycast operation, ornilif no eligibleBasePartorTerraincell was hit.
RegisterCollisionGroup(name: string): ()#
Registers a new collision group in this world with the given name. The
name cannot be "Default".
Note that this method has a slight performance overhead based on the
number of BaseParts in the world, so it's recommended
that you register all collision groups at edit time through the Studio
editor and call
UnregisterCollisionGroup()
and RenameCollisionGroup() as
infrequently as possible.
| Name | Type | Default | Description |
|---|---|---|---|
name | string |
Returns
()
RenameCollisionGroup(from: string, to: string): ()#
Renames the specified registered collision group in this world, but does
not rename the CollisionGroup property
of parts that utilize the group. The first argument of this method is the
name of the group to rename, the second argument is the new name for the
group. If the specified group does not exist, this method will not do
anything. The naming conventions for the new name follow the same rules as
if the group was being created with
RegisterCollisionGroup().
This method will throw a runtime error in the following circumstances:
- Invalid or empty name provided for either argument.
- The method is called from a client.
Note that this method has a slight performance overhead based on the
number of BaseParts in the world, so it's recommended
that you register all collision groups at edit time through the Studio
editor and rename
them as infrequently as possible.
| Name | Type | Default | Description |
|---|---|---|---|
from | string | ||
to | string |
Returns
()
Shapecast(part: BasePart, direction: Vector3, params: RaycastParams = RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}, cframeOverride: CFrame?, sizeOverride: Vector3?): RaycastResult?#
Casts the shape of the given BasePart in a given direction and
returns the first collision with a BasePart or Terrain
cell. This is analogous to how WorldRoot:Raycast() casts a linear
ray in a direction to find a collision, but it uses a 3D shape instead of
a ray. Unlike WorldRoot:Blockcast() and
WorldRoot:Spherecast(), which use a simple box or sphere, this
method casts the actual geometry of the provided part.
Unlike WorldRoot:GetPartsInPart(), this method does not detect
BaseParts that initially intersect the shape.
If a hit is detected, a RaycastResult is returned containing
the hit information. The Distance
property represents the distance the shape has to travel to find a hit,
and the Position property represents the
intersection point that causes the hit.
This method throws an error if it is passed a non-existent part, an
invalid direction, or a part with Terrain geometry.
| Name | Type | Default | Description |
|---|---|---|---|
part | BasePart | The part whose shape is cast. The cast uses this part's geometry
(block, ball, mesh, and so on) and size; excessively large parts may
not be supported, and it cannot be a Terrain part. | |
direction | Vector3 | Direction of the shapecast, with the magnitude representing the maximum distance the shape can travel. The maximum distance is 1024 studs. | |
params | RaycastParams | RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}} | An object used to specify hit eligibility in the shapecast operation.
If not provided, default values are used where all other parts are
considered and Terrain water is not ignored. The part being
cast is always excluded from the results. |
cframeOverride | CFrame? | The CFrame from which the shape begins the cast. If not
provided, the part's own CFrame is used. | |
sizeOverride | Vector3? | The size of the cast shape. If not provided, the part's own
Size is used. Every component must be finite and
greater than or equal to 0, and the shape must not exceed the
maximum supported side length. |
Returns
RaycastResult?— Contains the result of the shapecast operation, ornilif no eligibleBasePartorTerraincell was hit.
Spherecast(position: Vector3, radius: float, direction: Vector3, params: RaycastParams = RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}): RaycastResult?#
Safe
Casts a spherical shape in a given direction and returns the first
collision with a BasePart or Terrain cell. This is
analogous to how WorldRoot:Raycast() casts a linear ray in a
direction to find a collision, but it uses a 3D shape instead of a ray.
Unlike WorldRoot:GetPartsInPart(), this method does not detect
BaseParts that initially intersect the shape.
If a hit is detected, a RaycastResult is returned containing
the hit information. The Distance
property represents the distance the shape has to travel to find a hit,
and the Position property represents the
intersection point that causes the hit.
This method throws an error if it is passed invalid radius or direction inputs.
| Name | Type | Default | Description |
|---|---|---|---|
position | Vector3 | The initial position of the cast spherical shape. | |
radius | float | The radius of the cast spherical shape in studs. The maximum radius is 256 studs. | |
direction | Vector3 | Direction of the shapecast, with the magnitude representing the maximum distance the shape can travel. The maximum distance is 1024 studs. | |
params | RaycastParams | RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}} | An object used to specify hit eligibility in the shapecast operation.
If not provided, default values are used where all parts are
considered and Terrain water is not ignored. |
Returns
RaycastResult?— Contains the result of the shapecast operation, ornilif no eligibleBasePartorTerraincell was hit.
StepPhysics(dt: float, parts: Instances = {}): ()#
PluginSecurity security
Advances the simulation for parts in the world forward based on a
specified time increment and an optional set of BasePart. When a
set of parts is specified, only these parts will be simulated and all
other parts in the world will be treated as anchored. When this argument
is left out, all parts in the world will be included in the simulation.
The specified time increment can be any positive number, with larger
values increasing the runtime of the function. Depending on the value of
the time increment, the physics system may subdivide it into multiple
individual steps to maintain the accuracy and stability of the simulation.
Even if the function performs multiple substeps, the results of the
simulation will only be seen once the function completes. To visualize the
individual steps of a simulation, the function can be called once per
RenderStep via the RunService.RenderStepped event.
| Name | Type | Default | Description |
|---|---|---|---|
dt | float | The amount of time that will be simulated. This argument must be a positive number. Larger values will increase the runtime of this function. | |
parts | Instances | {} | Optional array of parts that will be simulated. This set must contain
instances that are of type BasePart; any other types will be
ignored. |
Returns
()
UnregisterCollisionGroup(name: string): ()#
Unregisters the collision group for the given name in this world, with the following behaviors:
- If an invalid name is provided, the method will not do anything.
- If the reserved name
"Default"is provided or if the method is called from a client, it will throw an error. - If there are any parts in the collision group when it is removed, those
parts will still maintain the same collision group name. The physical
behavior of parts in a removed group is undefined, so it's recommended
to move any parts in a removed group to another group, such as the
"Default"group.
Note that this method has a slight performance overhead based on the
number of BaseParts in the world, so it's recommended
that you register all collision groups at edit time through the Studio
editor and call this
method as infrequently as possible.
| Name | Type | Default | Description |
|---|---|---|---|
name | string |
Returns
()
Inherited members#
Inherited from Model 26
Properties (5)
LevelOfDetail, ModelStreamingMode, PrimaryPart, Scale, WorldPivot
Methods (21)
AddPersistentPlayer, BreakJoints, breakJoints, GetBoundingBox, GetExtentsSize, GetModelCFrame, GetModelSize, GetPersistentPlayers, GetPrimaryPartCFrame, GetScale, MakeJoints, makeJoints, move, MoveTo, moveTo, RemovePersistentPlayer, ResetOrientationToIdentity, ScaleTo, SetIdentityOrientation, SetPrimaryPartCFrame, TranslateBy
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