我有一个GameController对象,它带有一个覆盖整个屏幕的方形 2D 对撞机。在 GameController 内部有 7 个对象(Zones),每个对象都有自己的多边形碰撞器。这是设置:
我要做的是检查单击的位置是否在任何这些区域的对撞机内,每当我在大方形对撞机内单击时。
这是GameController 脚本的OnMouseDown()代码:
void OnMouseDown ()
{
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if(this.collider2D.bounds.Contains(mousePos)) Debug.Log ("1st Check");
//'Zones' is a list with all the Zones GameObjects
foreach (GameObject zone in Zones)
{
if(zone.collider2D.bounds.Contains(mousePos))
{
Debug.Log ("2nd Check");
}
}
}
我不应该总是得到“第一次检查”吗?因为它是多余的:如果OnMouseDown()被触发是因为我在对撞机内部单击,那么鼠标位置必须在对撞机内部。但我从不这样做,所以我认为我在这里遗漏了关于Input.mousePosition或ScreenToWorldPoint() 的一些内容。