Hirarchy To Text メモ not yet


HierarchyToText.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;

/// <summary>
/// シーン内でアタッチされているすべてを表示するEditorWindow
/// </summary>
public class HierarchyToText : EditorWindow
{
    Vector2 scrollPosition = Vector2.zero;

    UnityEngine.Object[] preScripts = new UnityEngine.Object[0];

    UnityEngine.Object[] scripts = new UnityEngine.Object[0];

    Dictionary<UnityEngine.Object, string> dicScripts = new Dictionary<UnityEngine.Object, string>();

    string scenescript;

    [MenuItem("Tools/HierarchyToText")]

    static void Open()
    {

        GetWindow<HierarchyToText>();

    }

    void OnGUI()
    {
        GUILayout.Label("ヒエラルキー上で使用されている全てを表示します");

        GUILayout.Space(2f);

        // ボタン表示
        if (GUILayout.Button("一覧 表示"))
        {
            SetDisctionary();
        }

        this.scrollPosition = EditorGUILayout.BeginScrollView(this.scrollPosition);

        foreach (var key in dicScripts.Keys)
        {
            EditorGUILayout.ObjectField(key, typeof(UnityEngine.Object), false);
        }

        EditorGUILayout.EndScrollView();

        GUI.backgroundColor = Color.white;

        //2019/02/20 保存ウィンドウ
        if (GUILayout.Button("保存"))
        {

            // 保存先のファイルパスを取得する
            var filePath = EditorUtility.SaveFilePanel("Save", "Assets", "Hierarchy", "txt");

            this.scenescript = "";

            // スクリプト一覧表示
            if (dicScripts != null && dicScripts.Count != 0)
            {
                foreach (var key in dicScripts.Keys)
                {
                    scenescript += dicScripts[key] + key.name + "\r";
                }
            }
            // パスが入っていれば選択されたということ(キャンセルされたら入ってこない)
            if (!string.IsNullOrEmpty(filePath))
            {
                // 保存処理
                textSave(scenescript, filePath);
            }
        }
    }
    /// <summary>
    /// シーン内でアタッチされているすべての自作スクリプトを取得する
    /// </summary>
    private IEnumerable<UnityEngine.Object> GetScripts()
    {
        var gameObjects = (GameObject[])UnityEngine.Object.FindObjectsOfType(typeof(GameObject)); // シーン内の全てのGameObject

        foreach (var go in gameObjects)
        {
            yield return go;
        }
    }
    void Traverse(GameObject obj)
    {
        Debug.Log(obj.name);
        foreach (Transform child in obj.transform)
        {
            Traverse(child.gameObject);

            dicScripts.Add(child, "|-"+ child.GetSiblingIndex().ToString());

        }
    }
    private void SetDisctionary()
    {
        dicScripts.Clear();



        //Transform[] all_transforms = UnityEngine.Object.FindObjectsOfType<Transform>().OrderBy(m => m.transform.GetSiblingIndex()).ToArray();

        // Loop through the transforms in the scene, exporting what is necessary
        //foreach (Transform go in all_transforms)
        //{
        //    if (go.transform.parent == null)
        //    {
        //        Traverse(go.gameObject);
        //    }
        //    else
        //    {
        //        dicScripts.Add(go, go.root.GetSiblingIndex().ToString());
        //    }
        //}

        var gameObjects = (GameObject[])UnityEngine.Object.FindObjectsOfType(typeof(GameObject)); // シーン内の全てのGameObject

        foreach (var go in gameObjects)
        {
            if (go.transform.parent == null)
            {
                Traverse(go);
            }
            else
            {
                dicScripts.Add(go, go.transform.root.GetSiblingIndex().ToString());
            }

        }
    }
    public void textSave(string txt, string filepath)
    {

        StreamWriter sw = new StreamWriter(filepath, false); //true=追記 false=上書き

        sw.WriteLine(txt);

        sw.Flush();

        sw.Close();

    }

}