タイトルの通り、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に触れていない場合
}
コメント
[…] 特定の座標が Collider 内にあるかを判定するメソッド | ゆーじの技術ブログ […]