【Unity】【エディタ拡張】Tooltipのようなポップアップを表示する

f:id:halya_11:20180808221320p:plain:w400

TooltipのようにWindowの上に出てくるポップアップを実装する方法です。

PopupWindow

今回の実装にはPopupWindowを利用します。
これは本来EditorWindowのツールバーのポップアップメニューなどに使うものです。

f:id:halya_11:20180808221611p:plain
マニュアル より

これには下記のような特徴があります。

  • フチやタイトルタブ、閉じるボタンなどがない
  • ドラッグやサイズ変更ができない
  • ポップアップ以外の場所をクリックすると閉じる
  • 画面端で開いたときに位置を自動的に調整してくれる

これらの特徴は簡単なポップアップにも使えそうなので、今回はこれを利用しました。

実装

まず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から開くようにしてみました。

結果

このようなポップアップウィンドウが開かれました。

f:id:halya_11:20180808221320p:plain:w400

参考

docs.unity3d.com