Unityのオブジェクトとマウスの当たり判定ではまった
Unityのオブジェクトとマウスの当たり判定ではまりました。
マウスの当たり判定の処理を書いたスクリプトを、オブジェクトに追加して、
オブジェクトを複数生成。
ここでは、オブジェA、オブジェB、オブジェCとします。
全て、座標は違います。
書いた当たりのスクリプトは
------------------------------------------------------------------------------------
Vector3 click = Input.mousePosition;
Vector3 p = Camera.main.ScreenToWorldPoint(click);
Debug.Log( "p.x=" + p.x + " p.y=" + p.y );
Collider2D collition2d = Physics2D.OverlapPoint(p);
if( collition2d )
{
Debug.Log("クリックされた");
}
------------------------------------------------------------------------------------
この場合、どのオブジェをクリックしても、「クリックされた」が3回、表示されました。
どうも、Physics2Dで返すオブジェクトは自分以外も返すようです。
うまくいったコードは
------------------------------------------------------------------------------------
Vector3 click = Input.mousePosition;
Vector3 p = Camera.main.ScreenToWorldPoint(click);
Debug.Log( "p.x=" + p.x + " p.y=" + p.y );
Collider2D collition2d = Physics2D.OverlapPoint(p);
if( collition2d )
{
if( collition2d.transform.gameObject == gameObject )
{
Debug.Log("クリックされた");
}
}
------------------------------------------------------------------------------------
自分のオブジェと比較する必要がある模様。
こうなってくると、各オブジェにタップ判定のスクリプトを追加するのではなく、
MainCamera等にスクリプトを追加して、中で判別してやる方が処理が軽そうな気がします。
その場合は、当たられる側がわかるように、共通のインターフェースクラスを継承して、各スクリプトで継承してやる必要があるのか・・・。
Unityでそのへん、楽に出来ると思ったのですが、いやはや。