检测2d碰撞侧行为怪异



我正在制作一个基本的突破游戏,并使用以下代码来检测胶囊对撞机2d和圆形对撞机2d之间的碰撞是否发生在顶部:

bool FindIfTopCol(Collision2D other)
{
print("collider.y " + collidersize.y / 2);
ContactPoint2D[] contacts = other.contacts;
if (contacts[0].point.y - transform.position.y > collidersize.y / 2)
{
print("top " + (contacts[0].point.y - transform.position.y));
return true;
}
else
{
print("not top " + (contacts[0].point.y - transform.position.y));
return false;
}
}

在大多数情况下,检测工作正常,但在运行游戏一段时间后,尤其是在圆碰撞机发生非顶部碰撞后,该方法似乎将所有碰撞返回为非顶部碰撞。

为了解决这个问题,我放置了打印报表,结果是:

碰撞0.2610874顶部0.2885695

碰撞0.2610874非顶部0.2552783第一次实际非顶部碰撞

碰撞0.2610874非顶部0.2542975这是顶部碰撞,但显示为非顶部

碰撞0.2610874非顶部0.2558844这是顶部碰撞,但显示为非顶部

在我重新开始游戏之前,会话的其余冲突也是错误的。

我不确定这里出了什么问题。

如果有更好的方法来检测碰撞侧,请告诉我。

我真的不确定这里发生了什么,但我会使用OnCollisionEnter2D()事件来检测冲突。然后将接触点与对撞机中心进行比较,找出它撞击的表面。这里有一个来自kacyesp的例子。

Vector3 contactPoint = collision.contacts[0].point;
Vector3 center = collider.bounds.center;
bool right = contactPoint.x > center.x;
bool top = contactPoint.y > center.y;

最新更新