SpecialMesh 对象根据 MeshType 属性将网格应用于 BasePart。有多种可用选项。
请注意,使用 DataModelMesh.Scale 时,每个 SpecialMesh.MeshType 的缩放方式不同,关于更多信息,请参见 DataModelMesh.Scale 页面。SpecialMesh 对象还公开了 DataModelMesh.Offset 属性。
重要的是要记住,当使用 SpecialMesh 时,仅部分的外观会变化。部分的碰撞模型保持不变。例如,角色将无法正确走过网格,因为不会考虑网格几何形状。
SpecialMesh 与 MeshPart
目前有两种使用开发者创建的网格的方法。使用将 SpecialMesh.FileType 设置为 'FileMesh' 的 SpecialMesh,或者使用 MeshPart。虽然整体而言,MeshPart 对象已取代 SpecialMesh,但开发者需要注意一些差异。
- 在使用 MeshPart 时,BasePart.Material 正常显示在网格上,而在使用 SpecialMesh 时则不会
- MeshParts 包含 MeshPart.CollisionFidelity 属性,这意味着可以设置 MeshPart 的碰撞模型以类似于网格的几何形状。相反,SpecialMesh 对象使用父对象 BaseParts 的碰撞模型
代码示例
在这个代码示例中,一个 BasePart 被实例化为一个 SpecialMesh。然后使用 TweenService 动画化 SpecialMesh 的 DataModelMesh.Scale 和 DataModelMesh.Offset 属性。
local TweenService = game:GetService("TweenService")
-- 实例化一个部件和一个网格
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")
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)
mesh.Parent = part
-- 选择框以显示部件范围
local box = Instance.new("SelectionBox")
box.Adornee = part
box.Parent = part
-- 将部件父级设置为工作区
part.Parent = workspace
-- 使用补间动画偏移和缩放
local tween = TweenService:Create(
mesh,
TweenInfo.new(1, Enum.EasingStyle.Linear, Enum.EasingDirection.Out, -1, true, 0),
{ Scale = Vector3.new(1, 1, 1), Offset = Vector3.new(0, 3, 0) }
)
tween:Play()
在此代码示例中,BasePart被实例化为SpecialMesh。 SpecialMesh的DataModelMesh.VertexColor属性随后使用TweenService进行动画处理。
local TweenService = game:GetService("TweenService")
-- 实例化一个部件和一个网格
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")
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)
mesh.VertexColor = Vector3.new(1, 1, 1)
mesh.Parent = part
-- 将部件放入工作区
part.Parent = workspace
-- 创建补间
local tweenInfo = TweenInfo.new(1, Enum.EasingStyle.Linear, Enum.EasingDirection.Out)
local blackTween = TweenService:Create(mesh, tweenInfo, { VertexColor = Vector3.new(0, 0, 0) })
local redTween = TweenService:Create(mesh, tweenInfo, { VertexColor = Vector3.new(1, 0, 0) })
local greenTween = TweenService:Create(mesh, tweenInfo, { VertexColor = Vector3.new(0, 1, 0) })
local blueTween = TweenService:Create(mesh, tweenInfo, { VertexColor = Vector3.new(0, 0, 1) })
local resetTween = TweenService:Create(mesh, tweenInfo, { VertexColor = Vector3.new(1, 1, 1) })
-- 动画
while true do
blackTween:Play()
blackTween.Completed:Wait()
redTween:Play()
redTween.Completed:Wait()
greenTween:Play()
greenTween.Completed:Wait()
blueTween:Play()
blueTween.Completed:Wait()
resetTween:Play()
resetTween.Completed:Wait()
task.wait()
end
概要
属性
确定将应用于 SpecialMesh 所属的 BasePart 的网格类型。
属性
网格的偏移量决定网格将显示在 BasePart.Position 的相对位置。
网格的缩放决定了网格相对于其原始尺寸的大小。
改变网格纹理的色调,配合 FileMesh.TextureId 使用。
属性
MeshType
SpecialMesh 对象应用于 BasePart 的网格取决于 MeshType 属性。可用的选项有:
请注意,使用 DataModelMesh.Scale 时,每个 MeshType 的缩放方式不同,关于更多信息,请参见 DataModelMesh.Scale 页面。
代码示例
在此代码示例中,BasePart被实例化为SpecialMesh。 SpecialMesh的DataModelMesh.VertexColor属性随后使用TweenService进行动画处理。
local TweenService = game:GetService("TweenService")
-- 实例化一个部件和一个网格
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")
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)
mesh.VertexColor = Vector3.new(1, 1, 1)
mesh.Parent = part
-- 将部件放入工作区
part.Parent = workspace
-- 创建补间
local tweenInfo = TweenInfo.new(1, Enum.EasingStyle.Linear, Enum.EasingDirection.Out)
local blackTween = TweenService:Create(mesh, tweenInfo, { VertexColor = Vector3.new(0, 0, 0) })
local redTween = TweenService:Create(mesh, tweenInfo, { VertexColor = Vector3.new(1, 0, 0) })
local greenTween = TweenService:Create(mesh, tweenInfo, { VertexColor = Vector3.new(0, 1, 0) })
local blueTween = TweenService:Create(mesh, tweenInfo, { VertexColor = Vector3.new(0, 0, 1) })
local resetTween = TweenService:Create(mesh, tweenInfo, { VertexColor = Vector3.new(1, 1, 1) })
-- 动画
while true do
blackTween:Play()
blackTween.Completed:Wait()
redTween:Play()
redTween.Completed:Wait()
greenTween:Play()
greenTween.Completed:Wait()
blueTween:Play()
blueTween.Completed:Wait()
resetTween:Play()
resetTween.Completed:Wait()
task.wait()
end