游戏内实体建模¶
Time:5 分钟
无论是在 Studio 中还是游戏进行时,开发者都可以通过使用 Union (联合)和 Negate (忽略)工具来创建充满细节的Articles/3D Modeling with Parts|实体模型
。这可以用来创建一些十分独特的游戏概念。
实体建模 API¶
UnionAsync()¶
BasePart/UnionAsync|UnionAsync()
函数必须在 BasePart
上调用。此函数需要一个数组(由一个或多个部件(otherParts
)组成)与调用的 BasePart
组合。
local part = workspace.Part1
local otherParts = {workspace.Part2, workspace.Part3, workspace.Part4}
-- 进行 union(联合)操作
local newUnion = part:UnionAsync(otherParts)
SubtractAsync()¶
BasePart/SubtractAsync|SubtractAsync()
函数也需要将一个数组(由一个或多个部件组成)从调用的 BasePart
中减除。
local part = workspace.Part1
local otherParts = {workspace.Part2, workspace.Part3, workspace.Part4}
-- 进行 union(联合)操作
local newUnion = part:SubtractAsync(otherParts)
游戏中实体建模是异步操作,这意味着它可能会占用一定资源。为了获得最佳的游戏性能,开发者不应同时执行大量此类 API 调用。
调用部件的以下属性将应用于结果部件:
Color
Material
Reflectance
Transparency
Anchored
CanCollide
Density
Friction
Elasticity
FrictionWeight
ElasticityWeight
基本演示¶
让我们用一个简单的演示脚本来测试游戏中的实体模型吧!将其复制并粘贴到 ServerScriptService 中的 Script
中或任何方便的位置即可。
实体建模 API 仅在服务器端起作用(在 LocalScript
中不起作用)。
-- 创建基础的窗户部件
local window = Instance.new("Part")
window.Size = Vector3.new(10, 16, 0.5)
window.Material = "Glass"
window.BrickColor = BrickColor.new("Persimmon")
window.Reflectance = 0.2
window.Transparency = 0.5
window.Position = Vector3.new(0, 8, 0)
window.Anchored = true
window.Parent = game.Workspace
-- 创建一个将从窗户中减去的部件
local subBlock = Instance.new("Part")
subBlock.Size = Vector3.new(4, 4, 4)
subBlock.Material = "SmoothPlastic"
subBlock.CanCollide = false
subBlock.Position = Vector3.new(0, 8, 0)
subBlock.Anchored = true
subBlock.Parent = game.Workspace
wait(2)
-- 从窗户中删减去较小的部件
local success, newUnion = pcall(function()
return window:SubtractAsync({subBlock})
end)
if success and newUnion then
newUnion.Position = window.Position
newUnion.Anchored = true
newUnion.Parent = game.Workspace
-- 移除原始部件
window:Destroy()
subBlock:Destroy()
end
本脚本中,操作的基本顺序是:
在场景中央创建一扇红色玻璃窗(第 2-10 行) 。
在窗户部件中央创建一个较小的块(第 13-19 行) 。
在 2 秒后,对窗户调用
BasePart/SubtractAsync|SubtractAsync()
,将较小的块作为要删减的部件。
数个原因可能导致游戏内实体建模操作失败(参见 API 文档)。因此,请始终使用 pcall()
以捕获意外错误。
如果成功,将返回名为 Union (联合)的结果部件。此实例不会设为工作区父项,所以您必须手动将其设为父项使其返回游戏世界。
原始部件仍留在游戏中,包括操作调用的实例(window
)和从中添加或删减的部件(subBlock
)。因此,在成功完成建模操作后,这些部件将被显式销毁(第 33-34行)。
实体建模游乐场¶
现在您已经了解了基础游戏实体建模,那就进入到示例场景来体验一下吧。