设置使用“SubtractAsync”函数获得的 Union 的 CollisionFidelity

问题描述 投票:0回答:1

我有一个脚本,它使用

BasePart
函数在
SubtractAsync
中随机生成地下房间。它工作得很好,但是
CollisionFidelity
不准确,导致我无法进入房间。

这是代码:

[...]
for _,i in workspace:GetPartsInPart(p) do -- Gets parts to be cut into
    local succ, err = pcall(function() -- pcall ignores part if it cannot be cut into (none of the parts I have with models need to be cut into)
        local fi = i:SubtractAsync({b.RemoveFromTerrain}) -- Cuts
        fi.Parent = i.Parent -- Replaces part with cut part
        i:Destroy()
    end)
end
[...]

请注意,尽管速度相当慢,但如果我能让它工作,那么在我的情况下,使用

SubtractAsync
所带来的性能损失将是值得的。

我尝试过以下方法:

  • 创建联盟后在脚本中设置
    CollisionFidelity
    -> 无法设置,因为没有(
    The current thread cannot write 'CollisionFidelity' (lacking capability Plugin)
    )
  • 在 Studio 中将
    CollisionFidelity
    设置在我要剪切的部分上 -> BaseParts 没有
    CollisionFidelity
    属性
lua roblox luau roblox-studio
1个回答
0
投票

如文档中所述,SubtractAsync/UnionAsync 中的第二个参数是碰撞保真度

碰撞保真度:Enum.CollisionFidelity 生成的 UnionOperation 的 Enum.CollisionFidelity 值。 默认值:“默认”

所以使用

local fi = i:SubtractAsync({b.RemoveFromTerrain}, Enum.CollisionFidelity.PreciseConvexDecomposition) -- Cuts
© www.soinside.com 2019 - 2024. All rights reserved.