【Unity】Physics2D.OverlapCircleとPhysics2D.OverlapCircleAll

Physics2D.OverlapCirclePhysics2D.OverlapCircleAllはUnityの2D物理エンジンで使用される関数で、ある点を中心に円形の領域内にあるコライダー(物体の衝突範囲)を検出するために使われます。しかし、これら二つの関数は動作が少し異なります。

Physics2D.OverlapCirclePhysics2D.OverlapCircleAll

  1. Physics2D.OverlapCircle:
    • この関数は指定された位置と半径で最初に検出されたコライダーを返します。
    • つまり、複数のコライダーがその範囲内に存在しても、1つのコライダーのみを返します(通常は最初に検出されたもの)。
    • 返されるのは単一のCollider2Dオブジェクトです。
  2. Physics2D.OverlapCircleAll:
    • この関数は指定された位置と半径内にあるすべてのコライダーを検出し、それらを配列で返します。
    • もし範囲内に複数のコライダーが存在する場合、それら全てが配列に含まれます。
    • 返されるのはCollider2D[]、つまりCollider2Dオブジェクトの配列です。

どちらの関数もレイヤーマスクを引数に取ることができ、特定のレイヤーに存在するコライダーだけを検出するために使うことができます。選択する関数は、あなたが必要とする情報(一つのコライダーだけか、あるいは範囲内の全てのコライダーか)によって異なります。

サンプルコード

Physics2D.OverlapCirclePhysics2D.OverlapCircleAllを使用するための簡単なサンプルコードを提供します。このコードは、指定した位置と半径を持つ円内のコライダーを検出し、それらをログ出力します。

Physics2D.OverlapCircle の使用例

using UnityEngine;

public class OverlapCircleExample : MonoBehaviour
{
    public Vector2 circleCenter;  // 円の中心座標
    public float circleRadius;    // 円の半径
    public LayerMask layerMask;   // 検出対象のレイヤーマスク

    void Update()
    {
        // 単一のコライダーを検出
        Collider2D collider = Physics2D.OverlapCircle(circleCenter, circleRadius, layerMask);

        if (collider != null)
        {
            Debug.Log("検出されたコライダー: " + collider.name);  // 検出されたコライダーの名前をログ出力
        }
        else
        {
            Debug.Log("円内にコライダーは検出されませんでした。");  // 検出されたコライダーがない場合のログ出力
        }
    }
}

Physics2D.OverlapCircleAll の使用例

using UnityEngine;

public class OverlapCircleAllExample : MonoBehaviour
{
    public Vector2 circleCenter;  // 円の中心座標
    public float circleRadius;    // 円の半径
    public LayerMask layerMask;   // 検出対象のレイヤーマスク

    void Update()
    {
        // 範囲内のすべてのコライダーを検出
        Collider2D[] colliders = Physics2D.OverlapCircleAll(circleCenter, circleRadius, layerMask);

        if (colliders.Length > 0)
        {
            Debug.Log("検出されたコライダー数: " + colliders.Length);  // 検出されたコライダーの数をログ出力
            foreach (Collider2D collider in colliders)
            {
                Debug.Log("検出されたコライダー: " + collider.name);  // 各コライダーの名前をログ出力
            }
        }
        else
        {
            Debug.Log("円内にコライダーは検出されませんでした。");  // 検出されたコライダーがない場合のログ出力
        }
    }
}

Unity

Posted by hidepon