1

我浏览了文档,但找不到使用内置物理引擎实现最简单的联系人管理的方法。

我有一种情况,当例如 2 个对象以相似的速度沿相似方向行进时(基本上当它们的速度矢量减法的距离太短时),应该忽略 2D 碰撞......

这些对象位于定义在正常情况下应该与之碰撞的其他类型对象的层中。相交(而不是碰撞)的对象数量可以任意增加。所以改变层不是一个可行的选择。

使用常规 box2d,我将使用来根据对象的掩码和其他参数b2ContactListener.PreSolve过滤对象,具体取决于掩码。Unity 的 2D API 的等价物是什么?

4

1 回答 1

2

我知道在运行时改变碰撞行为的唯一方法是禁用两个层之间或两个碰撞器之间的碰撞。

如果您的对象已经在不同的图层上,您可以通过禁用(和启用)它们之间的碰撞Physics2D.IgnoreLayerCollision()

如果您不想禁用整个图层,您可以指定两个应该互相忽略的碰撞器Physics2D.IgnoreCollision()

由于在碰撞发生之前没有调用任何方法,您要么需要检查自己哪些对象可以碰撞并启用或禁用碰撞,要么OnCollisionEnter2D()在之后使用和禁用碰撞。对于第二种方式,您需要存储碰撞前的速度并在碰撞发生后再次设置它们。

要添加某种预检查,您可以在对象周围添加更大的第二个碰撞器并将其设置为触发器。在此期间OnTriggerEnter2D(),您可以检查是否应该发生实际碰撞。

于 2014-07-24T11:41:41.983 回答