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の背景でマウスを右クリックするとこのようになります:
また、Popup Window上でマウスを右クリックするとこのようになります: