本日は 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}"); } }
シーンを再生すると、シーン内から検索条件に合ったオブジェクトを検索した結果がログで確認できました。