FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Unity »【Unity】【C#】Transfrom (GameObject) のパス名を取得する

【Unity】【C#】Transfrom (GameObject) のパス名を取得する  


 前回に引き続き、少しばかり Transform (GameObject) の便利メソッドを書いておく。

 GameObject.Find のマニュアルを見るとわかるが、ヒエラルキーの各オブジェクトの名前を '/' (スラッシュ) で繋げて、特定のオブジェクトを階層で指定することができる(ただし、ファイルシステムとは違い、名前は自由に付けられるため、同名パスが複数存在する場合があることに注意)。

 これに近いものを作るメソッドを定義してみよう。このメソッドでは Transform を返しているが、GameObject が欲しいなら、戻値から transform.gameObject を取得すれば良い


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



●Transform の(フル)パス名を作成する
using UnityEngine;

/// <summary>
/// Transform の(フル)パス名を作成する
/// 2020/11/08 Fantom (Unity 2019.4)
/// http://fantom1x.blog130.fc2.com/blog-entry-379.html
/// </summary>
/// <param name="transform">パス名を取得する Transform</param>
/// <returns>ヒエラルキールートからのパス名 (頭に '/' は付かない)</returns>
public static string GetFullPathName(this Transform transform)
{
if (transform.parent == null)
return transform.name;

return GetFullPathName(transform.parent) + "/" + transform.name;
}

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

var transforms = GetComponentsAll<Transform>(); //※前回の記事を参照
foreach (var tr in transforms)
{
Debug.Log(tr.GetFullPathName());
}



 GetRootTransforms(), GetComponentsAll() の2つのメソッドは以前の記事からコピペして欲しい。テストは前回のサンプルとほぼ同様なもので試してみよう。パス名となっているので、階層での位置がよくわかる。

 ただ、戻値には頭に '/' は付かないので、GameObject.Find() で絶対パスのように使うときには、頭に '/' を追加する必要がある(※また、GameObject.Find() はアクティブなオブジェクトしか検出しないので注意)。

 ちなみに、頭に '/' があるとき:"/nameA/nameB/nameC" はルート直下からとなり、
 無いとき:"nameA/nameB/nameC" はルート以外でもパターンが合えば、どの階層でもヒットするようだ(複数ある場合、一番最初に見つかったのものとなる。深さ優先探索っぽい)。

 また、似たようなものに、Transform.Find() というものもあるが、これは自身を除いた、子Transform 内で検出される。

 このメソッドは再帰処理なので、ランタイムでの利用はほどほどにした方が良いね。

 通常、決まったオブジェクトを検索したいのなら、GameObject.FindWithTag() を使った方がパフォーマンスが良い。ただし、事前にタグを作成(設定)しておく必要がある。

 ヒエラルキーでユニークな名前のオブジェクトなら、使いやすいかも知れない。







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


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



category: Unity

thread: ゲーム開発

janre: コンピュータ

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


トラックバック

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

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop