如何找到EdgeCollider2D(Unity 3D)的哪一侧发生碰撞?

时间:2015-04-05 20:30:30

标签: collision-detection edge unity3d-2dtools

我有一个带有EdgeCollider2D的地形GameObject和带有随机碰撞器的角色游戏对象。我想在每次调用OnCollisionEnter2D时找到EdgeCollider2D的哪一侧发生碰撞。 我写了these 3 functions来做这件事,但是它们太慢了(每当我的GameObject与Terrain发生碰撞时有一个~3帧的滞后峰值),有时不精确。

我有更快更准确的方法吗?

我在Pastebin的代码上有一个小错字,第一个函数不应该有' Alt'最后...

示例图片here

2 个答案:

答案 0 :(得分:0)

我遇到了类似的问题 - 在哪里我必须知道对撞机的哪一侧发生碰撞,我害怕经过多次搜索后,我认为没有有效的方法可以找到它。

所以,我做的是我在我的玩家周围附加了4个触发点(碰撞器作为触发器),一旦被触发,就调用他们自己独立的独立功能。这就是我能够找出发生碰撞的方向/方向的方法。

答案 1 :(得分:0)

您可以使用Collision2D.contacts。它是ContactPoint2D[]并且包含传入的Collider2D对象在碰撞时碰到/碰撞的所有点以及所有这些点的法线向量(如果你想要沿着碰撞的法线反弹球)点)。

在大多数情况下,它通常包含单点,但在某些情况下它可能会返回多个点,例如:一个盒子与另一个盒子碰撞(同时两个都有0个旋转),这将导致全面碰撞并且显然有多个接触点