【Unity】すべての子や孫から指定した名前のオブジェクトを取得する拡張メソッド

はじめに

Transform.Findだと子のオブジェクトしか検索できないのですべての子や孫から指定した名前のオブジェクトを取得する拡張メソッドを作成していきます

コード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
public static class TransformExtension 
{
    /// <summary>
    /// 指定した名前のオブジェクトを探す
    /// </summary>
    /// <param name="transform"></param>
    /// <param name="name"></param>
    /// <returns></returns>
    public static Transform FindChild(this Transform transform ,string name)
    {
        var allTransform = transform.GetComponentsInChildren<Transform>(true);
        var match = allTransform.Where((_ => _.name == name));

        return match.FirstOrDefault();
    }
}

使い方

using System.Collections;
using UnityEngine;

public class TestScene : MonoBehaviour
{
     public GameObject obj;

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.S))
        {
            var match = obj.transform.FindChild("Test");
        }
    }

}