LoginSignup
6
6

More than 5 years have passed since last update.

【Unity拡張】ヒエラルキー上で使用されている全スクリプトを表示するEditorWindowを作ってみた

Last updated at Posted at 2017-02-28

はじめに

「ヒエラルキー上で何のスクリプトが使われているかを確認したいなぁ」と思ったので、スクリプトを一覧表示するエディター拡張を作ってみました。

環境

Unity 5.5.0f3
Windows 10

作ったものについて

ヒエラルキー上でオブジェクトにアタッチされている全てのスクリプトの一覧を表示するウィンドウを作ってみました。
hierarchy_script.gif

ソースコード

以下のスクリプトをプロジェクト内のEditorフォルダ以下へ入れるとEditorWindowが使えるようになります。

HierarchyScriptViewerWindow.cs
namespace HierarchyScriptViewer
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using UnityEditor;
    using UnityEngine;

    /// <summary>
    /// シーン内でアタッチされているすべてのスクリプトを表示するEditorWindow
    /// </summary>
    public class HierarchyScriptViewerWindow : EditorWindow
    {
        Vector2 scrollPosition = Vector2.zero;
        Type[] componentTypes = new Type[0];
        MonoScript[] scripts = new MonoScript[0];

        [MenuItem("Tools/Hierarchy Script Viewer")]
        static void Open()
        {
            GetWindow<HierarchyScriptViewerWindow>();
        }

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

            // ボタン表示
            if (GUILayout.Button("スクリプト一覧 表示"))
            {
                this.scripts = this.GetScripts().ToArray();
            }

            // スクリプト一覧表示
            this.scrollPosition = EditorGUILayout.BeginScrollView(this.scrollPosition);
            foreach (var script in this.scripts)
            {
                if (script == null) { continue; } // nullチェック
                EditorGUILayout.ObjectField(script, typeof(MonoScript), false);
            }
            EditorGUILayout.EndScrollView();
        }

        /// <summary>
        /// シーン内でアタッチされているすべての自作スクリプトを取得する
        /// </summary>
        private IEnumerable<MonoScript> GetScripts()
        {
            var gameObjects = (GameObject[])UnityEngine.Object.FindObjectsOfType(typeof(GameObject)); // シーン内の全てのGameObject
            var monoScripts = Resources.FindObjectsOfTypeAll<MonoScript>(); // プロジェクト内の全てのスクリプト

            foreach (var monoScript in monoScripts)
            {
                var classType = monoScript.GetClass();
                if (classType == null) { continue; }
                if (classType.Module.Name != "Assembly-CSharp.dll") { continue; } // 自作クラスかどうか
                if (!classType.IsSubclassOf(typeof(MonoBehaviour))) { continue; } // MonoBehaviour継承クラスかどうか
                if (gameObjects.Any(go => go.GetComponent(classType) != null)) // アタッチされているGameObjectが存在するか
                {
                    yield return monoScript;
                }
            }
        }
    }
}

使う

メニュー上部から"Tools/Hierarchy Script Viewer"を選択するとウィンドウが開きます
image

ボタンをクリックするとヒエラルキー上で使用されているスクリプトの一覧が表示されます(完)
image

6
6
1

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
6
6