画面全体をカバーする正方形の 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() について何かが欠けていると思います。