我正在制作一个基本的 Breakout 游戏,并使用以下代码来检测 Capsule Collider 2d 和 circle collider 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这是顶部碰撞,但显示为非顶部
并且会话的其余碰撞也是这样的错误,直到我重新启动游戏。
我不确定这里出了什么问题。
如果有更好的方法来检测碰撞侧,请告诉我。