Unityで特定の座標がCollider内にあるかを判定するメソッド

タイトルの通り、Unityで特定の座標がCollider内にあるかを判定したくて調べていました。

するとそのまま使えるようなメソッドが存在していました。

 

Physics.OverlapSphere()

Physics.OverlapSphere()というメソッドがありました。

Unity - Scripting API: Physics.OverlapSphere

 

第一引数が中心座標、第二引数が球の半径で、引数で指定した球が触れたColliderを全て配列で返すメソッドです。

この第二引数の球の半径を0にすることで、指定した座標(第一引数の中心座標)が触れているColliderを全て返します。

 

ということで、返された配列の長さが0より大きい = 指定した座標がColliderの中にある、と判定できます。

var targetPos = new Vector3(1, 2, 3);  // 調べる点の座標

if (Physics.OverlapSphere(targetPos, 0).Length > 0) {
    // targetPosがColliderに触れている場合
} 
else {
    // targetPosがColliderに触れていない場合
}

 

何のColliderに含まれているかを判別したいときは、Physics.OverlapSphere()の返り値の配列かColliderの情報を取得できます。

また、第三引数にLayerMaskを指定することもできます。

 

Physics2D.OverlapPoint()

2Dの場合はPhysics2D.OverlapPoint()を使います。

Unity - Scripting API: Physics2D.OverlapPoint

 

第一引数が座標、第二引数はLayerMaskの指定です。

Physics2D.OverlapPoint()が返すのはCollider型で、全てのColliderを取得したい場合はPhysics2D.OverlapPointAll()を利用します。

 

var targetPos = new Vector2(1, 2);  // 調べる点の座標

if (Physics2D.OverlapPoint(targetPos)) {
    // targetPosがColliderに触れている場合
} 
else {
    // targetPosがColliderに触れていない場合
}

コメント

  1. […] 特定の座標が Collider 内にあるかを判定するメソッド | ゆーじの技術ブログ […]