[Unity 확장] 등급 제도에 사용된 모든 스크립트를 보여주는 EDITOR Window를 만들었습니다.

개시하다


등급 제도에서 어떤 스크립트를 사용했는지 확인하고 싶어서 스크립트를 일람하는 편집 확장을 시도했다.

컨디션


Unity 5.5.0f3
Windows 10

제작에 관한 것


첨부된 모든 스크립트 목록을 표시할 수 있는 창을 만들었습니다.

소스 코드


프로젝트 내의 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"를 선택하면 창이 열립니다.

단추는 등급 제도에 사용된 스크립트 목록을 표시합니다 (완성)

좋은 웹페이지 즐겨찾기