ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Unity - GetComponentInChildren:子オブジェクトのコンポーネントを一括で取得する

初めに

 本記事では、GetComponentInChildren の使い方をまとめます。この関数を使うと 子オブジェクトのコンポーネントを一括で取得できます。


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 コンポーネントがついていた場合、親オブジェクトのコンポーネントが取得されます。

子オブジェクトのコンポーネントを一括で取得する

 先ほどの使い方と同じ状態で子オブジェクトの 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 コンポーネントをつけた場合)

最後に