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_Box2d_Collision Detection - Fatal编程技术网

C# 统一二维碰撞检测

C# 统一二维碰撞检测,c#,unity3d,box2d,collision-detection,C#,Unity3d,Box2d,Collision Detection,我最近开始在Unity中开发我的第一个2D游戏,但我遇到了碰撞检测问题。有没有简单的方法来检测侧面的碰撞?我的对象有一个刚体2D和一个BoxCollider2D。Unity方法为您提供了一个与游戏对象接触的碰撞器的引用。因此,您可以将游戏对象的位置与击中您的游戏对象的位置进行比较。例如: void OnCollisionEnter2D(Collision2D coll) { Vector3 collPosition = coll.transform.position; if(

我最近开始在Unity中开发我的第一个2D游戏,但我遇到了碰撞检测问题。有没有简单的方法来检测侧面的碰撞?我的对象有一个刚体2D和一个BoxCollider2D。

Unity方法为您提供了一个与游戏对象接触的碰撞器的引用。因此,您可以将游戏对象的位置与击中您的游戏对象的位置进行比较。例如:

void OnCollisionEnter2D(Collision2D coll) 
{
    Vector3 collPosition = coll.transform.position;

    if(collPosition.y > transform.position.y)
    {
        Debug.Log("The object that hit me is above me!");
    }
    else
    { 
        Debug.Log("The object that hit me is below me!");
    }

    if (collPosition.x > transform.position.x)
    {
        Debug.Log ("The object that hit me is to my right!");
    } 
    else 
    {
        Debug.Log("The object that hit me is to my left!");
    }
}

假设你的物体是A,刚刚击中你物体的物体是B

正如James Hogle所说,应该在A自己的坐标系中比较B和A之间的位移。但是,如果对象旋转,会发生什么情况?你需要。然后检查碰撞器的象限

void OnCollisionEnter2D(Collision2D coll) {
    Vector3 d = transform.InverseTransformPoint(coll.transform.position);
    if (d.x > 0) {
      // object is on the right
    } else if (d.x < 0) {
      // object is on the left
    }
    // and so on
}
然而,仍然存在一个问题:更准确地说,我们应该检查碰撞的接触点。你应该使用这个属性