如何检测我在 OnCollisionExit2D() 上退出的对象的哪一侧

Posted

技术标签:

【中文标题】如何检测我在 OnCollisionExit2D() 上退出的对象的哪一侧【英文标题】:How do I detect which side of the object I exited from on OnCollisionExit2D() 【发布时间】:2021-04-27 09:01:56 【问题描述】:

我可以检测到我与对象的哪一侧发生碰撞,但是当我退出碰撞时我需要重置一些变量。如何判断我从对象的哪一侧退出? (即,如果我与地面发生碰撞,那么我会与左侧的墙壁发生碰撞,然后向右移动,我需要知道我是否已退出与墙壁的碰撞,或者我是否已退出与地面的碰撞。)

注意我碰撞的方块是墙壁和地面,所以我不能使用图层名称等。

【问题讨论】:

您能否添加一张图片来说明您的确切意思? 过去,您可以使用Collision2D.GetContact(0).normal 来尝试推断。我认为他们从OnCollisionExit2D 中删除了这一点...... 双重检查,是的,没错。这是NOT a well-received changelol 好吧,你可以得到从你的对象到另一个对象的方向,如果 x 为正,它会向左移动,如果 x 是负数,则向右等 @BugFinder 我认为您必须获取对撞机的顶点/边缘的位置(或近似它们)才能知道玩家是从方形平台的顶部还是右侧离开,如果位置差异和/或玩家速度的 x 和 y 都是正数。特别是如果平台是凹形的 【参考方案1】:

1.

我真的很难理解这个问题,但一个常见的技巧是你实际上在对象上有许多对撞机

说它是一个立方体。

实际上有六个对撞机,而不是一个立方体形对撞机!

(所以,基本上是扁平的,无论你想使用什么技术。)

根据您的情况,您可以确切地知道什么与什么相撞。

我真的不明白这个问题,但我想你想知道六个中的哪个是“最后一个”被触及的。

当然,这作为一个基本的编程问题很容易实现,只需弄清楚最后触及六个中的哪一个

2.

请注意,正如 BugFinder 所解释的那样。当你“离开”时,只需看看你的新速度,也就是说看看你的速度方向。

显然,这会立即告诉你另一个物体的“哪一部分”,你一定是被弹开了。

另外请注意,您确实可以简单地从新速度向后投射,然后看看您击中了什么 - 这很可能是弹跳您的原因!

--

请注意,PhysX 可以将事物消光到同一个框架中,当您在角落时“最后触摸”什么的想法可能会有问题。这就是为什么“2”是一种常用方法的原因。

【讨论】:

这就是我解决问题的方式。谢谢。抱歉,这不是一个明确的问题。我没有使用物理引擎,因为我正在创建一个传统的老式平台游戏,所以需要像素精确的运动。

以上是关于如何检测我在 OnCollisionExit2D() 上退出的对象的哪一侧的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Ionic 4 检测平台

如何检测 iPhone 上的内存泄漏?

如何在 ARCore Android 中禁用表面检测

您如何检测 iBeacon 发射器何时关闭?安卓

如何检测 SELECT 中的列是不是可以为空?

如何在 Android 中检测向左或向右滑动?