LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

複数のInspectorウインドウを一斉に操作する機能を作成する

PONOS Advent Calendar 2020の7日目の記事です。

昨日は@nissy_gpさんのNode.js+Sequelize+MySQLでプライマリーキーをUUIDにするでした。

はじめに

前回の記事で複数のInspectorウインドウを一度に開く機能を実装しました。
今回は開かれているすべてのInspectorウインドウに対して一括で処理を実行する方法を紹介します。

実装

すべてのInspectorウインドウを取得する

現在Unityエディタ上で開かれているすべてのInspectorウインドウを取得するためにはInspectorWindow.GetAllInspectorWindows()メソッドを利用します。

UnityCsReference/InspectorWindow.cs at master · Unity-Technologies/UnityCsReference · GitHub

UnityEditorにinternalとして定義されている InspectorWindowクラスの機能を直接呼び出すことはできないため、前回の記事と同様にリフレクション機能を使ってメソッド実行します。

var inspectorWindowType = Assembly.Load("UnityEditor").GetType("UnityEditor.InspectorWindow");
var mathodInfo = inspectorWindowType.GetMethod("GetAllInspectorWindows", BindingFlags.NonPublic | BindingFlags.Static);
var inspectorWindows = mathodInfo.Invoke(null, null) as EditorWindow[];

これで、開いているInspectorウインドウの配列を取得することができました。
なお、その後のウインドウ操作を行いやすいように、EditorWindowの配列として取得しています。

あとはこの配列内の要素を操作をしていけばOKです。

すべてのInspectorウインドウを閉じるサンプル

サンプルとして「開いているすべてのInspectorウインドウを閉じる機能」のコードを掲載します。

static void CloseAllInspector()
{
    var inspectorWindowType = Assembly.Load("UnityEditor").GetType("UnityEditor.InspectorWindow");
    var mathodInfo = inspectorWindowType.GetMethod("GetAllInspectorWindows", BindingFlags.NonPublic | BindingFlags.Static);
    var inspectorWindows = mathodInfo.Invoke(null, null) as EditorWindow[];

    foreach (var inspectorWindow in inspectorWindows)
    {
        inspectorWindow.Close();
    }
}

まとめ

今回紹介したInspectorWindow.GetAllInspectorWindows()メソッドを利用することで、開いているInspectorウインドウを一括で操作する機能を容易に作成することができます。
開発中、オブジェクトの比較用に頻繁に追加 / 削除されるウインドウなので、こういった機能を利用して効率的に操作していきたいですね。

明日は@nissy_gpさんです!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0