Событие отладки, используемое в Unity 3D

У меня проблема с пользовательским интерфейсом проекта, над которым я работаю. Он включает в себя "узлы" и соединяет их вместе. У меня есть соединение двух узлов, связанных с нажатием кнопки на начальном узле, а затем щелкнув другой узел, чтобы подключиться к нему. Последняя половина реализуется путем проверки, когда Event.current.type == EventType.MouseDown затем соедините начальный узел с узлом, над которым вы последний раз зависали.

В большинстве случаев это работает нормально, однако я заметил, что иногда, когда вы нажимаете на другой узел, он мгновенно не соединяет их вместе, пока вы не нажмете на узел. После выполнения Debug.Log(Event.current.type) это показывало, что иногда событие называлось "используется", когда я щелкал, а не "mouseDown", и поэтому не выполняло код соединения, пока я не щелкнул где-то еще. Кажется, это происходит только для некоторых узлов.

Вот две картинки поведения с выходом консоли:

Короткая демонстрация

Более длинная демо

Код проблемы:

private bool detectEscape()
{
    Debug.Log(Event.current.type);
    return (Event.current.type == EventType.MouseDown);
}

Эта функция иногда возвращает False при щелчках мыши из-за того, что событие иногда "используется". Это называется в GUI.

Известны ли какие-либо причины, по которым используется текущее событие? Я делаю сравнения, как указано выше, в ряде мест в моем коде. Может ли это быть причиной того, что используется текущее событие? Как мне этого избежать?

Правильно ли я использую систему событий?

Знаете лучший способ захвата щелчков мыши? С помощью Input.GetMouseButtonDown(0) к сожалению, это не вариант, так как он работает только во время игры, и эта программа предназначена для расширения редактора.

В противном случае, узнайте, как поставить точку останова в исходном коде Unity 3D, чтобы я мог поместить ее в функцию Event.Use() и определить, что потребляет событие мыши?

1 ответ

Решение

Предположительно вы где-то вызываете DetectEscape из OnGUI, верно? Текущее событие действительно только во время OnGUI. Кроме того, OnGUI может вызываться несколько раз за кадр с разными текущими событиями. Иногда тип события может быть "Перекрасить", иногда это может быть MouseDown, иногда это может быть что-то еще. Поэтому, если тип события не MouseDown, вы не хотите предполагать, что мышь не нажата; мышь все еще может быть выключена, но может произойти другое событие.

Другие вопросы по тегам