夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Unityプロジェクト内のマテリアルをシェーダー別に取得するツールを作る その①エディタウィンドウの基本設定

本日はUnity枠です。

筆者が開発に参加しているMixedRealityGraphicsToolsにはUnityエディタ上で使用可能な多くのツールが提供されています。

 今回はEditor拡張を使用してUnityプロジェクト内のマテリアルをシェーダー別に取得するEditor拡張を紹介します。

こちらは近日中にMRGTにPRを提出するつもりです。

〇動機

 Unityにはマテリアルやテクスチャを検索するという機能はありますが、デフォルトでシェーダー別にマテリアルを取得するといった使い方はできません。

 筆者はUntiy開発中においてマテリアル数が増えることによってシェーダーを変更することによって影響を受ける可能性があるマテリアルを知りたいというケースやそのものデフォルトのシェーダーからMRGTシェーダーへ移植できていないものなどの検索を行いたいという場面がありました。

〇Editorウィンドウの作成

Unityのエディタ拡張の機能を使用してウィンドウを作成する方法は以下になります。

redhologerbera.hatenablog.com

using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.Linq;


public class MaterialSearcher : EditorWindow
{
    [MenuItem("Window/Graphics Tools/Material Search by Shader")]
    static void MaterialSearch()
    {
        // OpenEditorWindow
        GetWindow<MaterialSearcher>();
    }

    void OnGUI()
    {
      ・・・
    }

}

 エディタ拡張を行うためにはEditorWindowクラスを継承する必要があります。

〇メニューの表示とウィンドウの展開

 [MenuItem("メニューの場所")]の属性を関数につけることでUnityのメニューとして追加され、選択することで関数内を発火させることができます。

   [MenuItem("Window/Graphics Tools/Material Search by Shader")]
    static void MaterialSearch()
    {
 GetWindow<MaterialSearcher>();
    }

今回の場合はWindow/Graphics ToolsMaterial Search by Shaderという名前でメニューが追加されるようになりました。

GetWindow();を選択することでMaterialSercherクラスのウィンドウが開きます。

〇GUI

OnGUI関数は開いたエディタウィンドウの表示を行う関数です。

    void OnGUI()
    {
      ・・・
    }

これによって基本的なエディタウィンドウの基本設定が完了しました。