Unity のゲーム開発において、オブジェクトを操作することは非常に重要です。オブジェクトの中には子オブジェクトを持っていることがありますが、親オブジェクト以下の子オブジェクトを全て取得したい場合があります。
今回は、Unity で子オブジェクトをすべて取得する方法について解説します。
目次
Transform で子オブジェクトを全て取得する
foreach を使って子オブジェクト全て順に取得するシンプルな方法です。
using UnityEngine;
// 親オブジェクトの Transform を取得する
Transform parentTransform = transform;
// 子オブジェクトを全て取得する
foreach (Transform child in parentTransform)
{
// 子オブジェクトに対する処理をここに書く
}
Transform.GetChild() で子オブジェクトを全て取得する
Transformクラスの GetChild()
メソッドを使って子オブジェクトを全て取得できます。GetChild()
メソッドは、Transform のインデックス番号を指定することで子オブジェクトを取得できます。また、子オブジェクトの数を取得するためには、Transform の childCount
プロパティを使用します。
// 親オブジェクトを取得
GameObject parentObject = GameObject.Find("ParentObject");
// 子オブジェクトの数を取得
int childCount = parentObject.transform.childCount;
// 子オブジェクトを順に取得する
for (int i = 0; i < childCount; i++)
{
Transform childTransform = parentObject.transform.GetChild(i);
GameObject childObject = childTransform.gameObject;
// 取得した子オブジェクトを処理する
}
このコードでは、Find()
メソッドを使用して親オブジェクトを取得しています。そしてGetChild()
メソッドを使い、インデックス番号を指定して子オブジェクトを取得しています。
GameObject.GetComponentsInChildren() で子オブジェクトを全て取得する
GameObject.GetComponentsInChildren()
メソッドを使用することで、指定した親オブジェクト以下にある全ての子オブジェクトの特定のコンポーネントを取得することができます。
// 親オブジェクトを指定する
GameObject parentGameObject = gameObject;
// 子オブジェクトのコンポーネントを取得する
Component[] components = parentGameObject.GetComponentsInChildren<Component>();
foreach (Component component in components)
{
// 取得した子オブジェクトのコンポーネントに対して処理を行う
}