Unity:我可以在运行时更改网格碰撞器的形状吗?

Mat*_*tte 3 mesh unity-game-engine mesh-collider

我有一个根据用户输入更新其形状的网格,如何让碰撞器匹配网格的新形状?

重要提示:网格始终是凸的(没有例外)。我发现为了让对撞机正常工作很重要。

我发现下面的视频在这里meshCollider.sharedMesh = null执行此操作,但是通过执行然后为每个帧简单地擦除并重新计算对撞机meshCollider.sharedMesh = updatedMesh

由于我已经在计算网格的每个顶点、边和三角形的位置,我是否可以将这些值用于网格碰撞器?

小智 5

无法做到这一点,因为碰撞器没有为此的构造函数。你所做的事情在统一文档中是明确不被允许的

“您不应该修改用于碰撞器的网格几何形状,因为每次更改网格时物理引擎都必须重建内部网格碰撞加速结构。这会导致大量的性能开销。对于需要在运行时碰撞和更改的网格,通常最好使用胶囊、球体和盒子等原始碰撞器来近似网格形状。

一种解决方法是在您的方法上使用 InvokeRepeating 并每秒而不是每帧创建新的网格碰撞器(您可以测试并使其为 0.1 秒、2 秒,无论什么都可以在不丢帧的情况下运行)。当对象完成移动时,您可以调用 CancelInvoke。