Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 二维碰撞侧行为异常的检测_C#_Unity3d_Collision Detection_Mesh Collider - Fatal编程技术网

C# 二维碰撞侧行为异常的检测

C# 二维碰撞侧行为异常的检测,c#,unity3d,collision-detection,mesh-collider,C#,Unity3d,Collision Detection,Mesh Collider,我正在制作一个基本的突破游戏,并使用以下代码检测胶囊碰撞器2d和圆形碰撞器2d之间的碰撞是否发生在顶部: bool FindIfTopCol(Collision2D other) { print("collider.y " + collidersize.y / 2); ContactPoint2D[] contacts = other.contacts; if (contacts[0].point.y - transform.position.y &g

我正在制作一个基本的突破游戏,并使用以下代码检测胶囊碰撞器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;
    }
}
在大多数情况下,检测工作正常,但在运行游戏一段时间后,尤其是在圆形碰撞器进入非顶部碰撞后,该方法似乎将所有碰撞作为非顶部碰撞返回

为了解决这个问题,我放置了打印语句,结果如下:

collidery 0.2610874 前0.2885695

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

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

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

在我重新启动游戏之前,会话的其余冲突也是这样错误的

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


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

我不确定这里发生了什么,但我会使用事件来检测碰撞。然后将接触点与碰撞器中心进行比较,以确定碰撞的表面。这里有一个例子

Vector3 contactPoint = collision.contacts[0].point;
Vector3 center = collider.bounds.center;

bool right = contactPoint.x > center.x;
bool top = contactPoint.y > center.y;