エディタ拡張でウィンドウを作る
Unityには、Unity Editorの機能をカスタマイズ・拡張するための仕組みがあります。
いわゆるエディタ拡張と呼ばれるものです。
開発者がUnity Editorに独自のツール、ウィンドウ、インスペクター表示、メニュー項目などを追加して、開発効率を向上させることができます。
今回は独自のウィンドウを作成する仕組みについて解説します。
ウィンドウを作るには?
独自のウィンドウを作成するには、EditorWindowクラスを継承したクラスを用意します。
EditorWindowは独自のウィンドウを作るための基底クラスです。
作成したクラスは、Editorフォルダ以下に配置します。
例えば以下の様なスクリプトです。
using UnityEditor;
public class SampleWindow : EditorWindow
{
[MenuItem("Window/SampleWindow")]
public static void Show()
{
GetWindow<SampleWindow>("Sample Window");
}
}
これでメニューからウィンドウを表示できます。
MenuItem属性を使用することで、UnityEditorのメニューバーに項目を追加し、そこからウィンドウを開けるようになります。
インスペクターなどと同様にUnity Editor上にドッキングできます。

表示できるウィンドウの種類
通常のドッキング可能なウィンドウ以外の形でもウィンドウを生成できます。
いくつか代表的なものを紹介します。
ポップアップ
ボタンなどの矩形を指定し、その下にポップアップとして表示することが出来ます。
ドロップダウンメニューのような表示になり、フォーカスを失うと自動的に閉じます。
ShowAsDropDown の第一引数は基準となる矩形領域、第二引数はポップアップウィンドウのサイズを指定できます。
public static void Show()
{
var window = CreateInstance<SampleWindow>();
window.ShowAsDropDown(new Rect(100, 100, 100, 100), new Vector2(200, 150));
}
ユーティリティウィンドウ
メインの作業を邪魔せず、一時的・補助的な機能を提供したい時に使えます。
ドッキングできないので、ドッキングさせたくないけど近くに表示させておきたい場合に向いているでしょう。
例えば、カラーピッカーやミニマップなど、作業中に参照したい補助的な表示をするのに適しています。
public static void Show()
{
var window = CreateInstance<SampleWindow>();
window.ShowUtility();
}
モーダルウィンドウ
以下の様にShowModalUtilityメソッドで表示するとモーダルウィンドウになります。
ドッキングもできません。ウィンドウを閉じるまで他のウィンドウにフォーカスを移すこともできません。
ユーザーに確認を取りたい場合に使用できます。
public static void Show()
{
var window = CreateInstance<SampleWindow>();
window.ShowModalUtility();
}
ウィンドウ内に描画する
EditorWindowを継承したクラス内に、OnGUI()メソッドを作成しその中に処理を追加することで表示されるようになります。
例えば以下の様に記述します。
この辺はインスペクターの拡張と同じですね。
private void OnGUI()
{
GUILayout.Label("Hogehoge", EditorStyles.boldLabel);
if (GUILayout.Button("ボタン"))
{
Debug.Log("ボタンが押された!");
Close();
}
}

まとめ
今回はエディタ拡張の機能の一つとして、独自のウィンドウを作成する手順を解説しました。 ウィンドウを作成することでインスペクター上だけでは編集しづらいデータを編集しやすくしたり、
複数のアセットを一括操作するツールを作成したり、プロジェクト固有のワークフローを効率化することができます。
エディタ拡張は少し複雑に感じるかもしれませんが、一度挑戦して慣れてしまえば開発効率を改善できる強力な武器になります。
小さなツールを作るところから始めて徐々に機能を追加していって、
プロジェクトにあったあなただけのUnity Editorを構築していきましょう。
📣おしらせ!
Unity Asset Storeで GROW YOUR GARDEN セール が開催中です。
農業関係のアセットなどが最大50%OFFでセール中です。