[Unity] 効率的なオブジェクト検索と操作:FindObjectsOfType関連

FindObjectsOfType関連で便利なものをまとめておきます。

オブジェクトの一括処理

FindObjectsOfType で特定のオブジェクトを一括取得し、foreach で各オブジェクトを一度に操作できます。

C#
foreach (var rigidbody in FindObjectsOfType<Rigidbody>())
{
    rigidbody.useGravity = false; // Rigidbody の重力設定を一括で変更
}
C#

FindObjectOfTypeの結果をリスト化

LINQ の ToList メソッドを使うと取得したオブジェクトをリストとして格納できるようです。

C#
using System.Linq;

var enemies = FindObjectsOfType<EnemyMovement>().ToList();
foreach (var enemy in enemies)
{
    if (enemy.IsDead)
    {
        enemies.Remove(enemy); // 条件に応じてリストから削除
    }
}
C#

FindObjectsOfTypeAll

FindObjectsOfTypeAll は、ゲームシーン上だけでなく非アクティブなオブジェクトPrefab内のオブジェクトも含めて全てのオブジェクトを検索します。

C#
// 非アクティブなものを含む全ての敵オブジェクトを検索
EnemyMovement[] allEnemies = Resources.FindObjectsOfTypeAll<EnemyMovement>();
C#

タグでオブジェクトを検索

FindGameObjectsWithTag

指定されたタグを持つすべてのアクティブなゲームオブジェクトを配列で取得します。

C#
GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy"); 
// タグが "Enemy" のすべてのオブジェクトを取得
C#

LINQ を使ったタグでの検索

LINQ の Where を用いる方法もあるそうです。

C#
using System.Linq;

Enemy[] enemies = FindObjectsOfType<Enemy>().Where(enemy => enemy.CompareTag("Enemy"))
C#

コメント

タイトルとURLをコピーしました