我正在制作一个基本的突破游戏,并使用以下代码来检测胶囊对撞机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 它的顶碰撞,但显示为非顶
剩下的碰撞也是这样的,直到我重新开始游戏。
我不知道这里出了什么问题。
另外,如果有更好的方法来检测碰撞侧,请告诉我。
发布于 2020-08-15 17:03:40
我不太清楚这里发生了什么,但是我会使用OnCollisionEnter2D()事件来检测碰撞。然后比较接触点与对撞机中心,以确定它击中的表面。下面是来自卡西耶普的一个例子。
Vector3 contactPoint = collision.contacts[0].point;
Vector3 center = collider.bounds.center;
bool right = contactPoint.x > center.x;
bool top = contactPoint.y > center.y;https://stackoverflow.com/questions/63426344
复制相似问题