TooltipのようにWindowの上に出てくるポップアップを実装する方法です。
PopupWindow
今回の実装にはPopupWindowを利用します。
これは本来EditorWindowのツールバーのポップアップメニューなどに使うものです。
マニュアル より
これには下記のような特徴があります。
- フチやタイトルタブ、閉じるボタンなどがない
- ドラッグやサイズ変更ができない
- ポップアップ以外の場所をクリックすると閉じる
- 画面端で開いたときに位置を自動的に調整してくれる
これらの特徴は簡単なポップアップにも使えそうなので、今回はこれを利用しました。
実装
まずPopupWindowContentを継承してポップアップのWindowを作ります。
using UnityEngine; using UnityEditor; public class PopupContentSample : PopupWindowContent { /// <summary> /// サイズを取得する /// </summary> public override Vector2 GetWindowSize() { return new Vector2(300, 150); } /// <summary> /// GUI描画 /// </summary> public override void OnGUI(Rect rect) { EditorGUILayout.LabelField("Sample"); } /// <summary> /// 開いたときの処理 /// </summary> public override void OnOpen() { } /// <summary> /// 閉じたときの処理 /// </summary> public override void OnClose() { } }
次にこれを開く処理を書きます。
using UnityEngine; using UnityEditor; public class PopupSampleWindow : EditorWindow { [MenuItem("Window/Popup Sample")] private static void Open() { EditorWindow window = CreateInstance<PopupSampleWindow>(); window.Show(); } private void OnGUI() { if (GUILayout.Button("Open Popup")) { // クリックした位置を視点とするRectを作る // 本来のポップアップの用途として使う場合はボタンのRectを渡す var mouseRect = new Rect(Event.current.mousePosition, Vector2.one); // PopupWindowContentを生成 var content = new PopupContentSample(); // 開く PopupWindow.Show(mouseRect, content); } } }
今回はWindowから開くようにしてみました。
結果
このようなポップアップウィンドウが開かれました。