我最近开始在Unity开始我的第一个2D游戏,但我遇到了碰撞检测问题。是否有任何简单的方法来检测侧面的碰撞?我的对象有Rigidbody2D
和BoxCollider2D
。
答案 0 :(得分:2)
Unity OnCollisionEnter2D方法为您提供了与您的gameObject接触的对撞机的引用。因此,您可以将gameObject的位置与击中您的gameObject的位置进行比较。例如:
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!");
}
}
答案 1 :(得分:2)
假设您的对象是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.contacts属性。