固体模型化

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

固体模型 是将 零件 以独特的方式组合在一起形成更复杂的形状,称为 联盟交叉 的过程。您可以使用工具栏的 模型 选项卡执行四个固体模型操作。

Studio's Model tab with the Solid Modeling tools highlighted.
工具快捷方式描述
联盟Shift Ctrl G  (Windows) Shift G (Mac)将两个或更多的零件组合起来形成单个牢固联盟。
交叉Shift Ctrl I  (Windows) Shift I (Mac)将重叠部件交叉到单个实体交叉点。
否定Shift Ctrl N  (Windows) Shift N (Mac)否定零件,用于制作孔和 indentations。
分离Shift Ctrl U  (Windows) Shift U (Mac)将联盟或交集分解为其各个部分。

联盟零件

联盟 工具将两个或更多零件结合形成单个实体UnionOperation。默认情况下,新联盟遵循每个部分的 Color 属性,尽管您可以启用其 UsePartColor 属性将整个联盟更改为特定颜色。

Block and cylinder parts overlapping

要将零件组合在一起形成联盟:

  1. 选择你想要组合在一起的所有零件。
  2. 点击 联盟 按钮。所有零件结合成一个整体UnionOperation,带有名称 联盟

交叉部件

交叉工具将重叠部件交叉到单个实体 。默认情况下,结果交叉点的面颜色来自原始零件的 Color 属性,尽管您可以启用其 UsePartColor 属性将整个交叉点更改为特定颜色。

Block and cylinder parts overlapping

要将重叠部分交叉起来:

  1. 选择所有想要交叉的零件。
  2. 点击 交叉 按钮。所有零件结合成一个整体IntersectOperation,带有名称 交叉

否定零件

否定工具否定一部分,使其与另一部分联合时,否定部分的形状从另一部分中减去。

Negated block overlapping a cylinder

要从其他重叠部分中减去零件:

  1. 选择你想要从其他部分中否定的部分。
  2. 单击 否定 . 零件变成了带有名称 NegateOperation 的 **** ,并变成粉色和透明以表明其状态。
  3. 选择要取消的部分和你想从其中减去的部分。
  4. 单击 联盟 。被否定的部分从包含重叠部分中被切割。

分离的联盟或交叉点

分离工具将分离工具分解为其各自的部分,基本上服务为联盟和交叉的“撤销”工具。

要将联盟或交叉点分解为单个部分:

  1. 选择联盟或交集。
  2. 单击 分开 。零件将回到原来的形式。

渲染忠实度

默认情况下,新的模型操作始终会在Automatic中显示,这意味着零件的细节基于其距离到相机的描述,如下表所述。

从相镜头的距离渲染忠实度
小于 250 个螺柱最高
250-500 格中等
500 或更多的螺柱最低

平滑角度

一个精确模型的零件的 SmoothingAngle 属性可以平滑相邻颜色或材料表面之间的角度。更高的值产生更光滑的外观,而更低的值产生更粗糙的外观,带有更多锋利边缘。

虽然 30 到 70 度之间的值通常会产生良好的结果,但 90 到 180 度之间的值不建议,因为它们可能会对锋利边缘的联盟和交叉产生“阴影”效果。

经验中的固体模型化

除了 Studio 中的 联盟 , 交叉 , 和 否定 工具外,您可以允许玩家在体验内使用固体建模操作通过 , , 和 ,。所有这些方法都必须在 BasePart 上调用,它们都需要一个或多个部分进行联合、交叉或减去调用部分。

联盟异步()

要显示 , 以下 使用工作区中的 Part1 与 Part2 、 Part3 和 Part4 结合, 然后将结果 转移到工作区的原始位置 Part1 。


local Workspace = game:GetService("Workspace")
local mainPart = Workspace.Part1
local otherParts = {Workspace.Part2, Workspace.Part3, Workspace.Part4}
-- 执行联合操作
local success, newUnion = pcall(function()
return mainPart:UnionAsync(otherParts)
end)
-- 如果操作成功,将其放置在同一位置并将其作为工作区的父级
if success and newUnion then
newUnion.Position = mainPart.Position
newUnion.Parent = Workspace
end
-- 摧毁操作后仍然完好的原始零件
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end

交叉异步()

要显示 , 以下 使用工作区中的 Part1 交叉它与 Part2 和 Part3 , 然后将结果 移到工作区的原始位置 Part1 。


local Workspace = game:GetService("Workspace")
local mainPart = Workspace.Part1
local otherParts = {Workspace.Part2, Workspace.Part3}
-- 执行交叉操作
local success, newIntersect = pcall(function()
return mainPart:IntersectAsync(otherParts)
end)
-- 如果操作成功,将其放置在同一位置并将其作为工作区的父级
if success and newIntersect then
newIntersect.Position = mainPart.Position
newIntersect.Parent = Workspace
end
-- 摧毁操作后仍然完好的原始零件
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end

减法异步()

要显示 SubtractAsync() , 以下 Script 使用工作区中的 Part1 BasePart 从中否认 Part2 , Part3 , 以及 Part4 BaseParts 从它中,然后将结果 UnionOperation 移至工作区的原始位置的 Part1


local Workspace = game:GetService("Workspace")
local mainPart = Workspace.Part1
local otherParts = {Workspace.Part2, Workspace.Part3, Workspace.Part4}
-- 执行减法操作
local success, newSubtract = pcall(function()
return mainPart:SubtractAsync(otherParts)
end)
-- 如果操作成功,将其放置在同一位置并将其作为工作区的父级
if success and newSubtract then
newSubtract.Position = mainPart.Position
newSubtract.Parent = Workspace
end
-- 摧毁操作后仍然完好的原始零件
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end