【问题标题】:How can I find on which side of an EdgeCollider2D (Unity 3D) a collision takes place?如何找到发生碰撞的 EdgeCollider2D (Unity 3D) 的哪一侧?
【发布时间】:2015-04-05 20:30:29
【问题描述】:

我有一个带有 EdgeCollider2D 的地形游戏对象和一个带有 Random Collider 的角色游戏对象。我想在调用 OnCollisionEnter2D 时找到发生碰撞的 EdgeCollider2D 的哪一侧。 我写了these 3 functions 来做这件事,但是它们太慢了(每当我的游戏对象与地形碰撞时,都会出现大约 3 帧的延迟峰值)并且有时不精确。

我有什么更快更精确的方法吗?

我在 Pastebin 的代码上有一个小错字,第一个函数的末尾不应该有“Alt”...

示例图片here

【问题讨论】:

    标签: collision-detection unity3d-2dtools


    【解决方案1】:

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

    所以,我所做的是在我的玩家周围附加了 4 个触发点(充当触发器的碰撞器),一旦被触发,它们就会调用它们自己独立的独立函数。这就是我能够找出碰撞发生在哪一侧/方向的方法。

    【讨论】:

    • 我相信你误解了我的意思。我不想知道玩家对撞机的方向/侧面。相反,我需要我映射到我的“地形”上的 EdgeCollider2D 的一侧,玩家与之发生碰撞。例如,这样我可以将我的 Player 的旋转与他正在碰撞的地形一侧对齐。 TL;DR 我需要一种更快的方法将 EdgeCollider 的最近侧告诉一个点(Vector2),这也应该比我的 CheckLinePoint 函数更准确。
    【解决方案2】:

    您可以使用Collision2D.contacts。它是一个ContactPoint2D[],包含碰撞时传入的 Collider2D 对象接触/碰撞的所有点以及所有这些点的法线向量(以防你想沿着碰撞点的法线反弹球) .

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

    【讨论】:

      猜你喜欢
      • 2014-08-12
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多