Unity C#で子・孫オブジェクトを取得する方法/GetChildの使い方

people IT

Unityで親要素から子要素・孫要素を取得する方法についてです。

スポンサーリンク

子要素・孫要素を取得する方法

目標

unity 子オブジェクト 取得1
それぞれ子要素にキャンバスおよびテキストを持つこういったプレハブに対し、
unity 子オブジェクト 取得2
クリックすると孫要素にあたるテキストを取得し、その数字を1増やす、というようなものを作ります。

子要素の取得(GetChild)

子オブジェクトの取得
transform.GetChild(番号).gameObject;
※番号は上から順に0,1,2..とカウント
//Unity C#
void Start()
{
GameObject cd = transform.GetChild(0).gameObject;
//動作確認で取得したオブジェクトを消してみる
Destroy(cd);     
}
なにはともあれ子要素を取得してみましょう。
子要素のキャンバスを取得するには、transform.GetChildを記述し、その後に0から数えた番号で何番目の子オブジェクトかを指定します。
unity 子オブジェクト 取得4
仮にこういう構成であれば、親cat1(3)から見てGetChild(0)はcat2、GetChild(1)はcat3という具合です。
unity 子オブジェクト 取得3
実行すると、子要素が削除されていることが確認できます。

孫要素の取得

//Unity C#
GameObject cd = transform.GetChild(0).gameObject;
GameObject gcd = cd.GetComponent<Transform>().transform.GetChild(0).gameObject;
子要素からもう一回子要素を取得すれば、孫要素が取得できます。

完成品

クリックしたときの処理なども組み込むと、以下のようになります。

//Unity C#
using UnityEngine.UI;

public class getChildCat : MonoBehaviour
{
    GameObject cd;
    GameObject gcd;
    Text text;
    int counter;

    void Start()
    {
    //子→孫オブジェクトを取得
        cd = transform.GetChild(0).gameObject;
        gcd = cd.GetComponent<Transform>().transform.GetChild(0).gameObject;
    }

  //クリック時の処理
    void OnMouseDown()
    {
    //孫要素のテキストを取得
        text = gcd.GetComponent<Text>();
        counter = int.Parse(text.text) + 1;
        text.text = counter.ToString();
    }
}
unity プレハブ 子オブジェクト
実行すると、スクリプトをアタッチしたプレハブをクリックするたびに上のテキストが1増えることが確認できます。
やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。

コメント