【发布时间】:2014-07-24 07:41:45
【问题描述】:
我浏览了文档,但找不到使用内置物理引擎实现最简单的联系人管理的方法。
我有一种情况,当例如 2 个物体以相似的速度沿相似的方向行进时(基本上当它们的速度向量减法的距离太短时),应该忽略 2D 碰撞...
这些对象位于定义在正常情况下应该与之碰撞的其他类型对象的层中。相交(而不是碰撞)的对象数量可以任意增加。所以改变层不是一个可行的选择。
使用常规 box2d,我将使用 b2ContactListener.PreSolve 根据掩码和其他参数过滤对象,具体取决于掩码。 Unity 的 2D API 相当于什么?
【问题讨论】:
-
你查过OnCollision___2D和OnTrigger___2D的方法吗?你可以改变不同方向的碰撞层,碰撞会自动发生。
-
@Savlon :据我了解 OnCollision2D 是在解决冲突后触发的......我错了吗?如果没有,有没有办法在触发时取消结果?我已经为 4 种不同类型的对象和 4 种不同的玩家使用了图层。我有任意数量的对象,除非我对层的理解是错误的,否则我看不出您的建议如何通过层实现。
-
如果禁用
OnCollisionEnter2D()中对应的Rigidbody组件会怎样?它是否给出了您正在寻找的结果? -
@AldourCheng
rigidbody2D.active = false使对象简单地处于非活动状态。coll.rigidbody.collisionDetectionMode = CollisionDetectionMode2D.None不产生可见效果。如果您的意思是停用对撞机,那么不会。因为这样的话,禁用碰撞器的对象将不会与其他相互排斥的对象、墙壁或它们应该撞击的其他对象发生碰撞。有没有办法取消OnCollisionEnter2D中的冲突? -
@Coyote 你的意思是你想暂时禁止对象受到内置物理引擎的影响吗?根据manual,
Rigidbody负责这个。那么如果你take it out from physics control呢?
标签: unity3d game-physics physics-engine unity3d-2dtools