Collapse Sidebar




The Offset of a mesh determines the distance from the BasePart/Position of a BasePart that the mesh will be displayed.

How to use mesh offset

The Offset property changes the relative position the mesh will be rendered at. For example, an offset of 0, 5, 0 will cause the mesh to be displayed 5 studs above the position of the BasePart.

The position of the BasePart remains unchanged, meaning the physics collision box of the part will remain in the same location. This is demonstrated in the image below where the green outline (a SelectionBox) shows the extents of the BasePart.

enter image description here

Other uses for mesh offset

There are a number of interesting uses for the mesh offset property.

  • Offset and DataModelMesh/Scale can be animated using TweenService relatively inexpensively as the engine does not need to make any physics/collision calculations as the BasePart is not moved.
  • Changing the relationship between the mesh and its collision extents (determined by the BasePart)

Code Samples

Mesh Offset and Scale

In this code sample a BasePart is instanced with a SpecialMesh. The DataModelMesh/Scale and DataModelMesh/Offset properties of the SpecialMesh are then animated using TweenService.

local TweenService = game:GetService("TweenService")

-- instance a part and a mesh
local part = Instance.new("Part")
part.Size = Vector3.new(4, 8, 4)
part.Position = Vector3.new(0, 4, 0)
part.Anchored = true
part.CanCollide = false 

local mesh = Instance.new("SpecialMesh", part)
mesh.MeshType = Enum.MeshType.FileMesh
mesh.MeshId = "rbxassetid://1086413449"
mesh.TextureId = "rbxassetid://1461576423"
mesh.Offset = Vector3.new(0, 0, 0)
mesh.Scale = Vector3.new(4, 4, 4)

-- selection box to show part extents
local box = Instance.new("SelectionBox", part)
box.Adornee = part

-- parent part to workspace
part.Parent = workspace

-- animate offset and scale with a tween
local tween = TweenService:Create(
  TweenInfo.new(1, Enum.EasingStyle.Linear, Enum.EasingDirection.Out, -1, true, 0),
  {Scale = Vector3.new(1, 1, 1), Offset = Vector3.new(0, 3, 0)}