Unity:collider2D.bounds.Contains 无法正常工作
Unity: collider2D.bounds.Contains not working properly
我有一个 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().
问题是 .collider2D.bounds.Contains(mousePos)
收到的是 Vector3,但本应收到的是 Vector2。
将其更改为 .collider2D.bounds.Contains(Vector2(mousePos))
并且效果很好。
我有一个 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().
问题是 .collider2D.bounds.Contains(mousePos)
收到的是 Vector3,但本应收到的是 Vector2。
将其更改为 .collider2D.bounds.Contains(Vector2(mousePos))
并且效果很好。