ビワトレジャーの日記

湖付近に住んでいるうつ病ゲームプログラマーのブログ

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でそのへん、楽に出来ると思ったのですが、いやはや。