1

我有一个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.mousePositionScreenToWorldPoint() 的一些内容。

4

1 回答 1

2

问题是.collider2D.bounds.Contains(mousePos)获得了 Vector3,但应该收到了 Vector2。将其更改为.collider2D.bounds.Contains(Vector2(mousePos))并像魅力一样工作。

于 2015-03-27T04:00:35.720 回答