Unity - GetComponentInChildren:子オブジェクトのコンポーネントを一括で取得する
初めに
本記事では、GetComponentInChildren の使い方をまとめます。この関数を使うと 子オブジェクトのコンポーネントを一括で取得できます。
Index
GetComponentInChildren
GetComponentInChildren について
GetComponentInChildren は
条件に合った子オブジェクト(親オブジェクト自身を含む)に含まれるコンポーネントを上層から探し、一番先に見つけたものを取得する関数
です。
引数の型は bool です。true の場合は非アクティブな子オブジェクトも含めてコンポーネントを取得します。
注意点はゲームオブジェクトはアクティブで、コンポーネントのみ非アクティブな場合は引数が false でも取得されます。
public T GetComponentInChildren (bool includeInactive= false);
使い方
子オブジェクトの Text コンポーネントを取得してみます。なお、今回は親オブジェクト(TextParent)には Text コンポーネントをつけていません。
次のスクリプトを親オブジェクト(TextParent)につけ、実行してみます。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class GetComponentInChildSample : MonoBehaviour { Text text; void Start() { text = this.GetComponentInChildren<Text>(false); text.text = "このコンポーネントを取得した"; } }
(実行結果)
上からコンポーネントを捜し、最初に見つけたものを返すため、一番上にあった TextChild1 のコンポーネントが取得されました。
子オブジェクトのコンポーネントを一括で取得する
先ほどの使い方と同じ状態で子オブジェクトの Text をすべて取得してみます。
次のスクリプトを親オブジェクト(TextParent)につけて実行してみます。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class GetComponentInChildSample : MonoBehaviour { Text text; void Start() { foreach (Text child in this.GetComponentsInChildren<Text>()) { Debug.Log(child.text); } } }
(実行結果)
子オブジェクトのコンポーネントがすべて取得できたことが分かります。なお、今回は親オブジェクトに Text コンポーネントをつけていないため、子オブジェクトのみ取得できましたが、親オブジェクトにも Text コンポーネントがついている場合は、それも取得されます。
(親オブジェクトにも Text コンポーネントをつけた場合)