1

画面全体をカバーする正方形の 2D コライダーを持つ GameController オブジェクトがありますその 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() について何かが欠けていると思います。

4

1 に答える 1

2

問題は.collider2D.bounds.Contains(mousePos)、Vector3 を取得していたのに、Vector2 を取得する必要があったことです。それをに変更し.collider2D.bounds.Contains(Vector2(mousePos))、魅力のように機能します。

于 2015-03-27T04:00:35.720 に答える