Unityで親要素から子要素・孫要素を取得する方法についてです。
子要素・孫要素を取得する方法
目標
それぞれ子要素にキャンバスおよびテキストを持つこういったプレハブに対し、
クリックすると孫要素にあたるテキストを取得し、その数字を1増やす、というようなものを作ります。
子要素の取得(GetChild)
子オブジェクトの取得
transform.GetChild(番号).gameObject;
※番号は上から順に0,1,2..とカウント
transform.GetChild(番号).gameObject;
※番号は上から順に0,1,2..とカウント
//Unity C#
void Start()
{
GameObject cd = transform.GetChild(0).gameObject;
//動作確認で取得したオブジェクトを消してみる
Destroy(cd);
}
なにはともあれ子要素を取得してみましょう。
子要素のキャンバスを取得するには、transform.GetChildを記述し、その後に0から数えた番号で何番目の子オブジェクトかを指定します。
子要素のキャンバスを取得するには、transform.GetChildを記述し、その後に0から数えた番号で何番目の子オブジェクトかを指定します。
仮にこういう構成であれば、親cat1(3)から見てGetChild(0)はcat2、GetChild(1)はcat3という具合です。
実行すると、子要素が削除されていることが確認できます。
孫要素の取得
//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();
}
}
実行すると、スクリプトをアタッチしたプレハブをクリックするたびに上のテキストが1増えることが確認できます。
やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。
コメント
[…] GetChild の使い方/子、孫オブジェクトを取得する方法 | すなぎつ […]