【Unity】GetComponentsInChildren<コンポーネント名>();

GetComponentsInChildren<コンポーネント名>()は、このメソッドが呼び出されるゲームオブジェクト及びその子オブジェクトにアタッチされたコンポーネント名の全てのコンポーネントを取得するためのメソッドです。これにより、特定のゲームオブジェクトの階層内で特定のタイプのコンポーネントを効率的に探索し、それらのリストを返すことができます。例えば、UI要素が多数のボタンを含むパネル内に配置されている場合、このメソッドを使用してそのパネル内の全てのコンポーネントを簡単に取得できます。

サンプル

  1. UIのPanelを作成
  2. 子オブジェクトとしてUIのButtonを複数配置
    ButtonはPrefabにしておく
  3. Panelと各Buttonにはスクリプトをアタッチします

ButtonFinder

using UnityEngine;

public class ButtonFinder : MonoBehaviour
{
    void Start()
    {
        // このゲームオブジェクトとその子オブジェクトからItemButtonコンポーネントを全て取得
        ItemButton[] buttons = GetComponentsInChildren<ItemButton>();

        // 取得したItemButtonの数とそれぞれのメソッドを実行
        foreach (ItemButton button in buttons)
        {
            button.ViewName();
        }
    }
}

このスクリプトは、ButtonFinderがアタッチされたゲームオブジェクトとそのすべての子オブジェクトを検索し、ItemButton コンポーネントを持っているものを見つけ出し、それらの名前をコンソールに出力します。これは、UIのセットアップ時や動的にコンテンツが変化するゲームシーンで特に有用です。

ItemButton

using UnityEngine;

public class ItemButton : MonoBehaviour
{
    public void ViewName()
    {
        Debug.Log($"ゲームオブジェクト名 {gameObject.name}");
    }
}

ViewNameというパブリックメソッドは、そのスクリプトがアタッチされているゲームオブジェクトの名前をコンソールに表示します。具体的には、Debug.Logを使用して、gameObject.nameを含む文字列をログ出力しています。この機能は、開発中にゲームオブジェクトを特定しやすくするために役立ちます。

Unity

Posted by hidepon