我有一个 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()的内容。
答案 0 :(得分:1)
问题是.collider2D.bounds.Contains(mousePos)
得到了Vector3,但是应该收到了Vector2。
将其更改为.collider2D.bounds.Contains(Vector2(mousePos))
,就像魅力一样。