コガネブログ

平日更新を目標にUnityやC#、Visual Studioなどのゲーム開発アレコレを書いていきます

【Unity】指定したオブジェクトからルートとなるオブジェクトを取得する拡張メソッド

using UnityEngine;

/// <summary>
/// GameObject 型の拡張メソッドを管理するクラス
/// </summary>
public static class GameObjectExtensions
{
    /// <summary>
    /// ルートとなるオブジェクトを返します
    /// </summary>
    public static GameObject GetRoot(this GameObject self)
    {
        var t = self.transform;
        for (; ; )
        {
            var parent = t.parent;
            if (parent == null)
            {
                break;
            }
            t = parent;
        }
        return t.gameObject;
    }
}

/// <summary>
/// Component 型の拡張メソッドを管理するクラス
/// </summary>
public static class ComponentExtensions
{
    /// <summary>
    /// ルートとなるオブジェクトを返します
    /// </summary>
    public static GameObject GetRoot(this Component self)
    {
        var t = self.transform;
        for (; ; )
        {
            var parent = t.parent;
            if (parent == null)
            {
                break;
            }
            t = parent;
        }
        return t.gameObject;
    }
}
gameObject.GetRoot();

追記

ルートオブジェクトは Transform.root でも取得できるようです

gameObject.transform.root;

narudesign 様ありがとうございます!