LoginSignup
0

More than 1 year has passed since last update.

Unity 複数の子オブジェクトを取得する方法

Posted at

0.0 はじめに

スクリプトを使って特定のオブジェクトの子オブジェクトを取得する方法を紹介します。

準備:
下記のように Parent というオブジェクトの子オブジェクトに Child オブジェクトを4つ作っています。Childの番号はわざとバラバラにしています。
TestオブジェクトにはTest.csスクリプトをアタッチしています。

image.png

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} です"); 
        }
    }
}

下記は実行結果です。
image.png

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++;
        }
    }
}

下記は実行結果です。
image.png

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0