LoginSignup
0
0

More than 3 years have passed since last update.

Hirarchy To Text メモ not yet

Posted at
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();

    }

}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0