MRが楽しい

MRやVRについて学習したことを書き残す

Unityで様々なFind関数を使ってシーン内のオブジェクトを検索する その1(様々な条件で検索を行う)

本日は Unity の小ネタ枠です。
Unityで様々なFind関数を使ってシーン内のオブジェクトを検索する方法についてです。

GameObject.Find

UnityのGameObject.Find関数はシーン内のゲームオブジェクトを検索して返します。
オブジェクト名で検索を行うFindのほか、タグ名で検索を行うFindWithTagやコンポーネントで検索を行うFindObjectOfTypeがあります。
docs.unity3d.com
docs.unity3d.com
docs.unity3d.com

条件に当てはまる複数のゲームオブジェクトを取得したい場合は以下のバリエーションを利用します。
docs.unity3d.com
docs.unity3d.com

関数名 検索条件 返り値
Find オブジェクト名 1つのみ
FindWithTag タグ名 1つのみ
FindGameObjectsWithTag タグ名 複数
FindObjectOfType コンポーネント 1つのみ
FindObjectsOfType コンポーネント 複数

サンプルシーン

以下のFind関数で検索を行うサンプルスクリプトとサンプルシーンを作成しました。
・FindTest.cs

using UnityEngine;

public class FindTest : MonoBehaviour
{
    void Start()
    {
        // オブジェクト名が"Cube"のオブジェクトを検索して情報をログに表示する
        var cubeObject = GameObject.Find("Cube");
        Debug.Log($"Name : {cubeObject.name}, Position : {cubeObject.transform.position}");
        
        // オブジェクトのタグ名が"MainCamera"のオブジェクトを検索して情報をログに表示する
        var mainCameraObject = GameObject.FindWithTag("MainCamera");
        Debug.Log($"Name : {mainCameraObject.name}, Position : {mainCameraObject.transform.position}");
        
        // オブジェクトに"CapsuleCollider"コンポーネントがアタッチされているオブジェクトを検索して情報をログに表示する
        var capsuleColliderObject = GameObject.FindObjectOfType<CapsuleCollider>();
        Debug.Log($"Name : {capsuleColliderObject.name}, Position : {capsuleColliderObject.transform.position}");
    }
}

シーンを再生すると、シーン内から検索条件に合ったオブジェクトを検索した結果がログで確認できました。