Class.SpecialMesh 对象将网格应用到一个 BasePart 依赖于 MeshType 属性。 有多个选项可用。
- 砖块 - 块状形,相当于一个 BlockMesh
- 头 - 角色头形
- 球体 - 一个球体形状,与 Part 类似,但可以在所有轴上自由缩放
- 楔子 - 楔子形状,与 WedgePart 相同
- 躯干 - 有斜面的方块,由于其将被弃用
注意,使用 DataModelMesh.Scale 时,每个 DataModelMesh.Scale 的大小都会随着使用 1> Class.DataModelMesh.Scale1> 而变化,有关更多信息,请参阅4> Class.DataModelMesh.Scale4> 页面。 对于特殊网格对象,还会暴露7> Class.DataModelMesh.Offset7> 属性
要记住,使用特殊网格时,只有部件的外观发生变更。网格的碰撞模型将保持不变。例如,一个角色将无法正确地走过网格,因为网格的几何学不会被考帐户。
SpecialMesh vs MeshPart
目前有两种使用开发者创建网格的方法。他们使用一个特殊网格,其中 SpecialMesh.FileType 设置为 "FileMesh",或使用 MeshPart 。 尽管如此,在整个开发者创建网格上, MeshPart 对象有一些差异,开发者应该注意到。
- BasePart.Material 在使用 MeshPart 和不使用特殊网格时正确显示在网格上
- MeshParts 包括MeshPart.CollisionFidelity 属性,意味着MeshPart 的碰撞模型可以设置为与网格相似。 但是,特殊网格对象通过对父对象0> Class.BasePart|BaseParts0> 的碰撞模型来使用
- Class.FileMesh.MeshId|MeshId 属性的 SpecialMesh 可以通过在执行时间时更改 Script 或 1>Class.LocalScript1> 来改变。4>Class.MeshPart.MeshId|MeshId4> 属性的 7>Class.MeshPart7> 无法。
代码示例
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")
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
-- selection box to show part extents
local box = Instance.new("SelectionBox")
box.Adornee = part
box.Parent = part
-- parent part to workspace
part.Parent = workspace
-- animate offset and scale with a tween
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()
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")
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
-- parent part to workspace
part.Parent = workspace
-- create tweens
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) })
-- animate
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
概要
属性
确定类型的网格将被应用到 BasePart 的 SpecialMesh 是父级。
MeshId 是要显示的网格内容的 ID。
TexturereId 是要应用到网格的材质的内容 ID。
网格的 Offset 决定了网格在 BasePart.Position 的 BasePart 上显示的相对位置。
网格的尺寸由网格的原始尺寸决定。
改变网格的材质的纹理,用于 FileMesh.TextureId 。
属性
MeshType
Class.SpecialMesh 对象应用到 BasePart 的网格取决于 MeshType 属性。有一些选项可用。
- 砖块 - 块状形,相当于一个 BlockMesh
- 头 - 角色头形
- 球体 - 一个球体形状,与 Part 类似,但可以在所有轴上自由缩放
- 楔子 - 楔子形状,与 WedgePart 相同
- 躯干 - 有斜面的方块,由于其将被弃用
注意,使用 DataModelMesh.Scale 时,每个 MeshType 的大小都会随着使用情况而略有不同,有关更多信息,请参阅 DataModelMesh.Scale 页面。
代码示例
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")
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
-- parent part to workspace
part.Parent = workspace
-- create tweens
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) })
-- animate
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