我有一个GameController对象,它有一个方形的2D对撞机,覆盖整个屏幕。在这个GameController中有7个对象(区域),每个对象都有自己的多边形对撞机。下面是设置:
视图
层次结构
我要做的是,当我点击大方格对撞机时,检查点击的位置是否在这些区域的对撞机内。
这是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()的东西。
发布于 2015-03-27 04:00:35
问题是.collider2D.bounds.Contains(mousePos)得到了一个Vector3,但是应该得到一个Vector2。把它改成了.collider2D.bounds.Contains(Vector2(mousePos)),工作起来很有魅力。
https://stackoverflow.com/questions/29200031
复制相似问题