Skip to content

Instantly share code, notes, and snippets.

@baba-s
Last active December 30, 2015 16:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save baba-s/7856061 to your computer and use it in GitHub Desktop.
Save baba-s/7856061 to your computer and use it in GitHub Desktop.
using UnityEngine;
using UnityEditor;
/// <summary>
/// メニューに独自の機能を追加するクラス
/// </summary>
public static class MenuItems
{
/// <summary>
/// 選択中のゲームオブジェクトのルートパスを出力する「Ctrl+Shift+C」
/// </summary>
[MenuItem("CONTEXT/Transform/Log Root Path %#c")]
[MenuItem("Log/Root Path %#c")]
private static void LogRootPath()
{
// 選択中のオブジェクトが存在しない場合は何もしない
if (!ValidateLogRootPath())
{
return;
}
// 選択中の全てのオブジェクトの情報を取得する
var transforms = Selection.transforms;
// 選択中の全てのオブジェクトのルートパスを出力する
foreach (var transform in transforms)
{
Debug.Log(CreateRootPath(transform, string.Empty));
}
}
/// <summary>
/// ルートパスを作成する再帰関数
/// </summary>
/// <returns>ルートパス</returns>
/// <param name='transform'>ルートパスを作成するオブジェクトの情報</param>
/// <param name='path'>作成中のルートパス</param>
private static string CreateRootPath(Transform transform, string path)
{
// ルートパスを作成する
path = string.Format("{0}/{1}", transform.name, path);
// 親のオブジェクトが存在する場合はルートパスを作成する
if (transform.parent != null)
{
path = CreateRootPath(transform.parent, path);
}
// 末尾の"/"を削除する
path = path.TrimEnd('/');
return path;
}
/// <summary>
/// 選択中のゲームオブジェクトのルートパスを出力できるかどうかを確認する
/// </summary>
[MenuItem("CONTEXT/Transform/Log Root Path %#c", true)]
[MenuItem("Log/Root Path %#c", true)]
private static bool ValidateLogRootPath()
{
return Selection.transforms != null && 0 < Selection.transforms.Length;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment