7080 + 1

ゲームプログラミングの記事を書いてます。

【Unity】EditorWindowを定義しているスクリプトをすぐに探せるようにする

はじめに

ゲームを開発していると、EditorWindowを継承して、そのゲーム専用のエディタウィンドウを作成することがよくあるかと思います。
開発が進むと、いろんな人がエディタウィンドウを新しく定義して、エディタウィンドウが増えていくこともあるかと思います。
そんな時、ふと「このEditorWindowの実装どうなってるんだろう」と思うことがあると思います。

が、EditorWindowを定義しているスクリプトファイルがどれになるのか、スムーズに探せないことがあります。
EditorWindowのタイトルが別に定義されていたりするとさらにわからなくなります。GUIの表示から処理を推測してスクリプトファイルを探す..なんてことを僕はしょっちゅうやっています。

解決策

あまり効率的ではないので、これを解決する方法を紹介します。
動画のようにメニューからスクリプトの場所を探すことができるようになります。

EditorWindowにIHasCustomMenuを実装する

IHasCustomMenu を実装すると、EditorWindow右上のボタンで出る一覧に自分のメニューを増やすことができます。

using UnityEngine;
using UnityEditor;

public class ExampleEditorWindow : EditorWindow, IHasCustomMenu
{
    [MenuItem("Tools/EditorWIndow")]
    public static void Open()
    {
        EditorWindow.GetWindow<ExampleEditorWindow>("ExampleEditorWindow");
    }

    /// <summary>
    /// メニューにアイテムをを追加する
    /// </summary>
    /// <param name="menu">メニュー</param>
    public void AddItemsToMenu(GenericMenu menu)
    {
        menu.AddItem(new GUIContent("Ping Script"), false, () => {
            var mono = MonoScript.FromScriptableObject(this);
            EditorGUIUtility.PingObject(mono);
        });
    }
}

GenericMenu.AddItem() を使うことで、簡単にメニューを追加することができます。