Unity 6.3
0 онлайн 54 гостей 3 в системе
Вход

Реагирование на события с помощью настраиваемых элементов управления

Если вы внедряете пользовательские элементы управления, вы можете ответить на UI Toolkit событий следующим образом:

Как реагировать на события, зависит от ситуации. Вот чем отличаются обратные вызовы от переопределения виртуальных методов:

  • Обратные вызовы должны регистрироваться на экземплярах класса. Виртуальные методы требуют изменения самого класса.
  • Переопределения виртуальных методов имеют небольшое преимущество в производительности, потому что они не требуют поиска в регистре обратного вызова во время фазы распространения.

Переопределите виртуальные методы HandleEventBubbleUp или HandleEventTrickleDown

Переопределение виртуального метода действует на все экземпляры класса. Для класса, который переопределяет HandleEventBubbleUp или HandleEventTrickleDown, вы также можете зарегистрировать обратные вызова на его экземплярах.

Чтобы переопределить HandleEventBubbleUp или HandleEventTrickleDown методов или и того, и другого, получают новый подкласс VisualElement.

HandleEventBubbleUp и HandleEventTrickleDown выполняются на каждом экземпляре подкласса визуального элемента, когда этот экземпляр получает событие.

Следующий пример показывает, как настроить эти виртуальные методы:

override void HandleEventBubbleUp(EventBase evt)
{
    // Call the base function.
    base.HandleEventBubbleUp(evt);

    if (evt.eventTypeId == PointerDownEvent.TypeId())
    {
        // ...
    }
    else if (evt.eventTypeId == MouseUpEvent.TypeId())
    {
        // ...
    }
    // More event types
}

Для конкретного экземпляра класса выполнение собственного кода в следующих случаях даёт одинаковый результат:

  • В обратном вызове для фазы BubbleUp
  • В переопределении метода HandleEventBubbleUp

В любом случае, если остановить распространение события, это предотвратит реакцию на событие после выполнения текущих обратных вызовов целей и переопределений методов.

Передовая практика

Ниже приведены рекомендации по обработке событий с помощью настраиваемых элементов управления.

Поведения реализации

В целом, для реализации поведения из вашего элемента, используйте HandleEventBubbleUp method override.

Учитывая, что BubbleUp является фазой распространения по умолчанию для обратных вызовов, вы можете переместить любой код из обратных вызовов в метод HandleEventBubbleUp, не беспокоясь об изменении времени выполнения кода.

Преимущества реализации поведения в качестве переопределения метода включают:

  • Переопределения методов не требуют поиска в реестре обратного вызова.
  • Экземпляры без обратных вызовов не включаются в процесс распространения.

Остановить распространение событий

Обрабатывая событие в обратном вызове или в переопределении виртуального метода, вы можете остановить его дальнейшее распространение, вызвав у события один из методов StopPropagation. Например, родительская панель может прервать распространение на фазе движения вниз, чтобы её потомки не получили событие.

Вы не можете предотвратить исполнение EventBase.PreDispatch() и EventBase.PostDispatch() методы внутри самого класса события.

На распространение событий влияют следующие методы:

  • StopImmediatePropagation(): немедленно останавливает процесс распространения события, чтобы предотвратить выполнение любых последующих обратных вызовов для события.
  • StopPropagation(): Остановка процесса распространения событий после последнего обратного вызова текущего элемента. Это гарантирует, что все обратные вызова будут выполняться на текущем элементе, в то же время предотвращая отклик на событие любых последующих элементов.

Дополнительные ресурсы