我浏览了文档,但我无法使用内置的物理引擎实现最简单的联系人管理。
我有一种情况,当例如2个物体以相似的速度在相似的方向上行进时,应该忽略2D碰撞(基本上当它们的速度矢量减法距离太短时)......
这些对象位于层中,用于定义在正常情况下应与其碰撞的其他类型的对象。交叉(并且不碰撞)的对象的数量可以任意增加。因此,更改图层不是一个可行的选择。
使用常规box2d我将使用b2ContactListener.PreSolve
根据蒙版和其他参数过滤对象,具体取决于蒙版。与Unity的2D API相同的是什么?
答案 0 :(得分:2)
我知道在运行时更改碰撞行为的唯一方法是禁用两层之间或两个碰撞器之间的碰撞。
如果您的对象已经在不同的图层上,您可以通过Physics2D.IgnoreLayerCollision()
禁用(并启用)它们之间的碰撞。
如果您不想要禁用整个图层,则可以使用Physics2D.IgnoreCollision()
由于在碰撞发生之前没有名为的方法,您需要检查哪些对象可能发生碰撞并启用或禁用碰撞,或者使用OnCollisionEnter2D()
并在之后禁用碰撞。对于第二种方式,您需要在碰撞之前存储速度并在碰撞发生后再次设置它们。
要添加某种预检查,您可以在对象周围添加更大的第二个对撞机并将其设置为触发器。在OnTriggerEnter2D()
期间,您可以检查是否应该发生实际碰撞。