LoginSignup
15
14

More than 5 years have passed since last update.

EditorWindow内のPopup Window上でマウスを右クリックしてコンテキストメニューを表示する

Last updated at Posted at 2015-06-09

EditorWindowクラスの派生クラスで表示したウィンドウ上でマウスを右クリックするとEventType.ContextClickイベントが発生します。しかし、GUI.Window()を使って表示したPopup Window上でマウスを右クリックしてもEventType.ContextClickイベントは発生しません。

Popup Window上では代わりにEventType.MouseDownイベントの発生と、マウスを右クリックしたかどうかで判定します。

using UnityEditor;
using UnityEngine;

public class MyEditorWindow : EditorWindow
{
    [MenuItem("Window/MyEditorWindow")]
    static void ShowWindow()
    {
        GetWindow<MyEditorWindow>();
    }

    Rect rect = new Rect(10, 10, 100, 100);

    void OnGUI()
    {
        BeginWindows();
        rect = GUI.Window(1, rect, WindowCallback, "window");
        EndWindows();

        var ev = Event.current;
        if (ev.type == EventType.ContextClick)
        {
            // MyEditorWindowの背景でマウスを右クリックするとここに来る。 
            var menu = new GenericMenu();
            menu.AddItem(new GUIContent("MyEditorWindow.OnGUI()"), false, MenuClicked);
            menu.ShowAsContext();
            ev.Use();
        }
    }

    void WindowCallback(int id)
    {
        var ev = Event.current;
        if (ev.type == EventType.MouseDown && ev.button == 1)
        {
            // MyEditorWindow内のPopup Window上でマウスを右クリックするとここに来る。
            var menu = new GenericMenu();
            menu.AddItem(new GUIContent("MyEditorWindow.WindowCallback()"), false, MenuClicked);
            menu.ShowAsContext();
            ev.Use();
        }
    }

    void MenuClicked()
    {
    }
}

MyEditorWindowの背景でマウスを右クリックするとこのようになります:
MyEditorWindowの背景でマウスを右クリックした時の様子

また、Popup Window上でマウスを右クリックするとこのようになります:
Popup Window上でマウスを右クリックした時の様子

参考

Clickable GUI.Window - Unity Answers

15
14
0

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
  3. You can use dark theme
What you can do with signing up
15
14