Unity2d SpriteのColliderが指定したワールド座標に重なってるか判定する

はじめに

ゆう@あんのうんです。

Unity2d SpriteのColliderが指定したワールド座標に重なってるか判定する

単純にSpriteのCollider2dとの接触を検知する

SpriteにCollider2dを設定し、そのCollider2dが指定したワールド座標と接触しているかの判定を行うための方法です。

ワールド座標の取得についてはこちらの記事を参考にしてください。

判定したいSpriteにCollider2dが設定されているとして、以下の処理を記述します。

Vector2 position = /* 適当な値 */;
Collider2d collider = Physics2D.OverlapPoint(position)

もし指定した座標にCollider2dがあればそのオブジェクトが取り出され、 何も無ければnullが返ります。


重なりあったSprite全てのCollider2dを検知する。

上述のやり方では1つ問題があります。 それは、Spriteが重なり合っている時に、全てを検知することが出来ません。 (重なりの中で1番上に配置されているSpriteのみ適用されてしまいます)

重なったSprite全て等しく接触を検知する場合は、OverlapPointではなく、OverlapPointAllを利用します。 ちなみに、OverlapPointAllは戻り値が配列になっているのでご注意ください。

Vector2 position = /* 適当な値 */;
Collider2d[] colliderArr = Physics2D.OverlapPointAll(position)

// 値があれば、取り出す
if (colliderArr.Length > 0) { 
    foreach (Collider2D collider in colliderArr) {
        /* 処理 */
    }

}