Unity 2D碰撞检测

本文关键字:碰撞检测 2D Unity | 更新日期: 2023-09-27 18:15:15

我最近开始在Unity中制作我的第一款2D游戏,但我遇到了一个碰撞检测问题。是否有简单的方法来获得侧面的碰撞检测?我的对象有一个Rigidbody2D和一个BoxCollider2D

Unity 2D碰撞检测

Unity OnCollisionEnter2D方法给你一个碰撞器的引用,它已经与你的游戏对象接触。因此,你可以将你的游戏对象的位置与击中你的游戏对象的位置进行比较。例如:

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之间的比较位移。然而,如果你的物体被旋转了会发生什么呢?你需要transform.InverseTransformPoint。然后检查对撞机的象限。

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
}

然而,仍然有一个问题:更精确地说,我们应该检查碰撞的接触点。你应该使用coll。接触属性。