コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】#defineで定義されているシンボルを一覧で表示するウィンドウをエディタ拡張で実装する

概要

using System;
using UnityEditor;
using UnityEngine;

/// <summary>
/// #define で定義されているシンボルを一覧で表示するウィンドウを管理するクラス
/// </summary>
public sealed class SymbolListWindow : EditorWindow
{
    private Vector2 mScrollPos; // スクロールの座標

    /// <summary>
    /// ウィンドウを開きます
    /// </summary>
    [MenuItem("Tools/Open/Symbol List Window")]
    private static void Open()
    {
        GetWindow<SymbolListWindow>("Symbol List");
    }

    /// <summary>
    /// GUI を表示します
    /// </summary>
    private void OnGUI()
    {
        // スクロールビューの表示を開始します
        mScrollPos = EditorGUILayout.BeginScrollView(mScrollPos, GUILayout.Height(position.height));

        // 定義されているシンボルを取得します
        var defines = EditorUserBuildSettings.activeScriptCompilationDefines;

        // 取得したシンボルを名前順でソートします
        Array.Sort(defines);

        // 定義されているシンボルの一覧を表示します
        foreach (var define in defines)
        {
            EditorGUILayout.BeginHorizontal(GUILayout.Height(20));

            // Copy ボタンが押された場合
            if (GUILayout.Button("Copy", GUILayout.Width(50), GUILayout.Height(20)))
            {
                // クリップボードにシンボル名を登録します
                EditorGUIUtility.systemCopyBuffer = define;
            }

            // 選択可能なラベルを使用してシンボル名を表示します
            EditorGUILayout.SelectableLabel(define, GUILayout.Height(20));

            EditorGUILayout.EndHorizontal();
        }
    
        // スクロールビューの表示を終了します
        EditorGUILayout.EndScrollView();
    }
}

上記のスクリプトをUnityのプロジェクトのEditorフォルダに
「SymbolListWindow.cs」という名前で保存した後に
Unityエディタのメニューの「Tools>Open>Symbol List Window」を実行すると

f:id:baba_s:20140725104618p:plain

このようなウィンドウが表示されて
defineで定義されているシンボルを一覧で確認することができます
(Unityが定義しているシンボルも自分で定義したシンボルもすべて表示されます)

f:id:baba_s:20140725104624p:plain

Copyボタンを押すか文字列を選択してコピーすることで
クリップボードにシンボル名を保存することもできます

なので、下記のようにシンボルが定義されているかどうかで処理を分岐させたい時に
少しだけコーディングの手間を省くことができます

#if UNITY_EDITOR

    // ...
    
#else

    // ...
    
#endif

関連記事