【Unity】半径3m内のゲームオブジェクトをすべて取得する

特定エリアを爆発によって破壊するなどに使うことができる機能です

実行結果

特定のポイントを基準として半径3mのゲームオブジェクトを取得しています
ビデオではコライダーをわかりやすく目視できるようにPhysicsDebuggerを使って色をつけています
GameObjectのコライダーのアタッチはそのためで実際は使いません

スクリプト

メソッドが用意されています
エリア内のオブジェクト(コライダーがアタッチされている)を取得して配列に入れられます

using UnityEngine;

public class SphereCastAllTest : MonoBehaviour
{
    void Start()
    {
        Explosion();
    }

    void Explosion()
    {
        RaycastHit[] hits = Physics.SphereCastAll(
            transform.position,
            3.0f,
            Vector3.forward);

        Debug.Log($"検出されたコライダーの数: {hits.Length}");

        foreach (var hit in hits)
        {
            Debug.Log($"検出されたオブジェクト {hit.collider.name}");
        }
    }
}

解説

引数に半径がありますので、どの範囲までかを設定します
結果はRaycastHit型に配列で取得できます

RaycastHit[] hits = Physics.SphereCastAll(中心, 半径, 方向)

検出されたゲームオブジェクトを取得するコードは次のようになります

foreach (var hit in hits)
{
   // hit.collider.gameObjectでゲームオブジェクトを取得できます
}

ゲームオブジェクト型の配列が欲しい場合はLINQで次のようにすればいいですね

GameObject[] hitObjects = hits.Select(hit => hit.collider.gameObject).ToArray();

Unity

Posted by hidepon