#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; }