Обнаружение мыши, освобождающей фокус от инспектора в Unity

#c# #unity3d #assets #unity3d-editor

#c# #unity3d #активы #unity3d-редактор

Вопрос:

Видите ли вы, как после редактирования значения, скажем, в активе изображения, а затем щелчка в любом месте снаружи без предварительного нажатия кнопки применить появляется окно с вопросом, хотите ли вы сохранить или отменить изменения?

Итак, я хотел сделать в значительной степени это из OnGUI() or OnSceneGUI() , и сразу после начала написания MyClassEditor : Editor понял, что я не только знал, как это сделать; но, видимо, я даже не знал, с чего начать поиск того, как обнаружить мышь, «вводящую» или «покидающую» что-либо вПользовательский интерфейс … если это вообще возможно.

Это то, что я нашел первым при поиске в Google «обнаружение мыши, покидающей инспектор Unity», и, насколько я понял, речь идет об обнаружении границ границ экрана и границ игрового окна. Итак, я перешел к следующему результату, который теперь выглядит многообещающим в начале, поскольку он, похоже, описывает мою проблему, но это вводит в заблуждение, поскольку это решение применяется для обнаружения мыши внутри представления сцены без потери фокуса пользовательского интерфейса. и я хочу обнаружить потерю фокуса, поэтому я возвращаюсь к Googleтолько для того, чтобы наткнуться на пару (больше похоже на несколько tbh) подобных случаев (например, ссылка на unity Monobehaviour.OnMouseEnter/Exit ).

Что, вероятно, показывает, насколько я потерян, и я не хочу просить о чем-либо решаемом, но, может быть, подойдет небольшой толчок в правильном направлении? Я ценю каждую небольшую помощь.

Редактировать: итак, я попробовал это внутри [CustomEditor(typeof(MyClass))] public class MyClassEditor : Editor :

 public override void OnInspectorGUI()
        {
            Event e = Event.current;

            switch (e.type)
            {
                case EventType.MouseDown:
                    Debug.Log("mouse down");
                    break;
                case EventType.MouseEnterWindow:
                    Debug.Log("mouse left a window");
                    break;
                case EventType.MouseLeaveWindow:
                    Debug.Log("mouse entered a window");
                    break;
                default:
                    break;
            }

            base.OnInspectorGUI();

            var click = GUILayout.Button("Quick Fill");

            if (click)
            {
                MyClassEditorWindow.Open((MyClass)target);
            }   
        }
 

и даже когда кнопка работает и срабатывает [mouse down] (только при нажатии поверх того, что, я думаю, будет UIElements (?), Хотя — но не вне их, в пустой области инспектора -), два других, похоже, не срабатывают… уверен, что я делаю не одну вещь неправильно, а не знаю, что из всего.

Ответ №1:

В EditowWindow есть свойство с именем wantsMouseEnterLeaveWindow. Если вы установите для него значение true, вы получите EventType .MouseLeaveWindow / EventType .События MouseEnterWindow. Обычно я включаю его в OnEnable функции следующим образом:

private void OnEnable() { wantsMouseEnterLeaveWindow = true; }