Overlay機能
Unity2021.2からSceneView上の要素はOverlayというものに置き換わり、自由に配置を動かせるようになりました。
ParticleSystemを選択したときのウィンドウも↓こんな感じになっていて左上をドラッグすることで自由に動かすことができます
自分でも追加したくなったのでやってみたのですがめちゃくちゃ簡単だったのでメモ
Overlay作成
OverlayAttributeをつけて簡単なクラスを実装するだけです
Editor拡張クラスのprivateクラスで以下のようなクラス定義をするのが一番楽そうです
// staticで選択中のデータを入れておく private static OverlayData _overlayData; // EditorのOnEnableで生成 void OnEnable() { _overlayData = new OverlayData(); } // EditorのOnDisableで空にしておく void OnDisable() { _overlayData = null; } // Overlay側への受け渡し用のクラス private class OverlayData { public readonly int[] counts=new int[16]; } // 第2引数のIDは被らないように命名 [Overlay(typeof(SceneView), "Scene View/CustomID", "タイトル", false)] private class SceneViewOverlay : IMGUIOverlay, ITransientOverlay { private bool _foldout; public bool visible => _overlayData != null; public override void OnGUI() { if (_overlayData == null) return; EditorGUILayout.LabelField("合計", _overlayData.counts.Sum().ToString()); _foldout = EditorGUILayout.Foldout(_foldout, "詳細", true); if (_foldout) { EditorGUI.indentLevel++; for (int i = 0; i < _overlayData.counts.Length; i++) EditorGUILayout.LabelField($"[{i}]", _overlayData.counts[i].ToString()); EditorGUI.indentLevel--; } } }
このコードだけでSceneViewに表示されて動かしたり他の要素へのスナップもできます
OverlayAttribute
このAttributeをクラスにつけるだけでSceneView内に配置されます
IMGUIOverlay
このクラスを継承することでOnGUIの実装ができます
ITransientOverlay
このインターフェースによって表示非表示の切り替えができます
Overlay
IMGUIOverlayの代わりにOverlayを使用するとUIElementでの実装になります
まとめ
めちゃくちゃ便利だった