统一是否有一种干净的方法来切换(enable/disable)网格和盒子碰撞器与刚体? (3d)

In unity is there a clean way to switch (enable/disable) Mesh and Box colliders with a Rigidbody? (3d)

我目前正在开发一款经典的 fps 游戏,我希望能够生成更大的数字 "enemies",最好是数百个。虽然这可能不可行。我希望对这些敌人模型使用物理学和 Rigidbod[ies]

显然,最好的解决方案是在所有这些模型上使用 mesh colliders,但我很确定这会影响性能。所以我的替代想法是,当它们与玩家至少相距 X 距离时,最初使用盒式碰撞器设置它们,然后一旦它们进入玩家周围的半径以切换(通过启用和禁用)这些盒式碰撞器到网格碰撞器。

这可行吗?有什么影响?我的初始测试导致模型失去了与地板的碰撞检测,因此掉落在环境中。

切换是否会对性能产生影响 (enabling/disabling) colliders/if 这甚至会有所不同吗?

最后如果 none 以上,是否有更好的解决方案来解决这个问题?

我认为你应该为你的敌人准备两个对撞机:

1) 用于物理交互的持久框。 (这个对撞机将在一个单独的层上,只与物理碰撞 space。

2) 然后,您将拥有灵活的盒子/网格对撞机。 enable/disable 它们不是交换对撞机。如果太远,请尝试启用盒子,如果太近,请启用网格碰撞器。我认为启用和禁用比在运行时删除和添加组件更能提高性能。另外,因为你已经有了 'environmental collider',所以交换对敌人的移动来说不是问题。

希望对您有所帮助。

我所知道的最常见的做法是在同一个刚体下使用多个原始碰撞器;我相信这比使用网格碰撞器更有效,此外,作为额外的好处,您甚至可以非常轻松地处理特殊命中(爆头造成 x2 伤害,腿部射击减慢敌人速度),因为您确切地知道哪个碰撞器被击中了。

这是他们在《反恐精英》中如何做到这一点的示例

请注意,您必须将每个原始碰撞器正确放置在骨骼结构上,以便它在动画期间正确移动。