0.0 はじめに
スクリプトを使って特定のオブジェクトの子オブジェクトを取得する方法を紹介します。
準備:
下記のように Parent というオブジェクトの子オブジェクトに Child オブジェクトを4つ作っています。Childの番号はわざとバラバラにしています。
TestオブジェクトにはTest.csスクリプトをアタッチしています。
1.0 for文で子オブジェクトを取得
Transform.GetChild()の引数を指定することで目的の子オブジェクトを取得することができます。
GetChildの引数の順番(0から)は子オブジェクトの順番(上からの順番)と一致します。
ポイント👍
Transform.childCountにて子オブジェクトの数を取得することができます。
スクリプトの例です。
Test.cs
using UnityEngine;
public class Test : MonoBehaviour
{
GameObject parent; // 親オブジェクト
Transform[] children; // 子オブジェクト達を入れる配列
void Start()
{
// Parentという名の親オブジェクトを検索
parent = GameObject.Find("Parent");
// 子オブジェクト達を入れる配列の初期化
children = new Transform[parent.transform.childCount];
// 検索方法1
for (int i = 0; i < parent.transform.childCount; i++) {
children[i] = parent.transform.GetChild(i); // GetChild()で子オブジェクトを取得
Debug.Log($"検索方法1: {i} 番目の子供は {children[i].name} です");
}
}
}
2.0 foreach文で子オブジェクトを取得
Transformコンポーネントがforeachステートメントに対応しているのでforeach分を使うと子オブジェクトを順番に取得できます。
ポイント👍
foreach文では 配列から取り出すオブジェクトの型名にvarを使うことがありますが、下記ではTransformの型名指定が必要です。foreach(var child in parent.transform)ではエラーが発生します。
スクリプトの例です。
Test.cs
using UnityEngine;
public class Test : MonoBehaviour
{
GameObject parent; // 親オブジェクト
Transform[] children; // 子オブジェクト達を入れる配列
void Start()
{
// Parentという名の親オブジェクトを検索
parent = GameObject.Find("Parent");
// 子オブジェクト達を入れる配列の初期化
children = new Transform[parent.transform.childCount];
// 検索方法2
int count = 0; // 番目を表示するためのもの
foreach (Transform child in parent.transform) {
children[count] = child; // 順番に子オブジェクトを取得
Debug.Log($"検索方法2: {count} 番目 の子供は {children[count].name} です");
count++;
}
}
}