FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Unity »【Unity】【C#】シーン(ヒエラルキー)のルートにある Transform を全て取得する(非アクティブも含む)

【Unity】【C#】シーン(ヒエラルキー)のルートにある Transform を全て取得する(非アクティブも含む)  


 ちょっとした便利メソッド。まぁ、ググればすぐにできるものだけど、毎回調べるのが面倒なので、静的メソッドにでもしておこうかと(笑)。

 ヒエラルキーにあるそれぞれの GameObject のルート Transform は Transform.root プロパティで十分だけど、現在のシーンで一度に取得するには SceneManager を使うのが便利だね。ただそれをまとめただけの超簡単なもの(笑)。

(※) Unity 2019.4.13f1 / Windows10(x64) で確認



●現在のシーン(ヒエラルキー)のルートにある Transform を全て取得する
using System.Linq;
using UnityEngine;
using UnityEngine.SceneManagement;

/// <summary>
/// 現在のシーンのルートにある Transform を全て取得 (非アクティブも含む)
/// 2020/11/02 Fantom (Unity 2019.4)
/// http://fantom1x.blog130.fc2.com/blog-entry-377.html
/// </summary>
/// <returns>ルートにある Transform 全て</returns>
public static Transform[] GetRootTransforms()
{
var scene = SceneManager.GetActiveScene();
var objects = scene.GetRootGameObjects();
return objects.Select(go => go.transform).ToArray();
}

●使用例(メインコード等)
using UnityEngine;

var roots = GetRootTransforms();
foreach (var tr in roots)
{
Debug.Log(tr.name);
}


 非アクティブなものでも取得できるのが少し便利。SceneManager.GetActiveScene() で現在のシーンからのみ取得してるので、対象外のシーンからは取得できないので注意。

 ちなみに、エディタスクリプトでも使える。というより、エディタツール作るときに欲しかったんだよね(笑)。


 少し古いやり方では、Object.FindObjectsOfType(アクティブなもののみ)や Resources.FindObjectsOfTypeAll(非アクティブも含む)でもできるね(ただし、負荷は高いのでランタイムで使うには注意)。

 テラシュールさんにサンプルコードがあるので参考にするのも良いかも知れない。たぶん SceneManager (or メソッド) がまだ無かった時代のやり方だと思う。全てから transform.parent が null ならルートとして判定している。

 非アクティブなものも取得したい場合、Resources.FindObjectsOfTypeAll を使えば良いが、このメソッドの場合、ヒエラルキーにないプレファブも取得してしまうんだよね。なので、ヒエラルキー以外を弾く処理を挟む必要があり、少し面倒くさい。必要なら以下に参考資料を載せておくので、試してみるのも良いだろう。

シーンのルートにあるGameObjectを取得する
【Unity】Hierarchy上のゲームオブジェクトを全て取得







(関連記事)
【Unity】【C#】非アクティブも含めて、全ての GameObject からコンポーネントを取得する
【Unity】【C#】Transfrom (GameObject) のパス名を取得する
【Unity】【C#】非アクティブも含めて、Transform (GameObject) をパス名で取得する
【Unity】【C#】ヒエラルキー(シーン)の全てのオブジェクト(Transform)をスキャンして処理をする
【Unity】【C#】RectTransform の矩形の実座標を取得する(GetWorldCorners)


関連記事
スポンサーサイト



category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityライブラリ  Unityリファレンス  Transform 
tb: 0   cm: --


トラックバック

トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/377-871ce624
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop