Unity 6.3
0 онлайн 102 гостей 3 в системе
Вход
UI системы Шаг 176 из 317

Синтез и отправка событий

Прежде чем синтезировать и отправить пользовательские события, изучите как UI Toolkit event system распределяет и отправляет события операционной системы.

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

Система событий использует пул событий, чтобы избежать повторного выделения объектов событий.

Чтобы синтезировать и отправить собственные события:

  1. Получение объекта события из пула событий.
  2. Заполните свойства события.
  3. Заключите событие в блок using, чтобы оно было возвращено в пул событий.
  4. Передайте событие panel.visualTree.SendEvent().

Вы можете отправлять события операционной системы, такие как события клавиатуры и указателя. Для этого используйте UnityEngine.Event для инициализации события UI Toolkit.

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

void SynthesizeAndSendKeyDownEvent(IPanel panel, KeyCode code,
     char character = '\0', EventModifiers modifiers = EventModifiers.None)
{
    // Create a UnityEngine.Event to hold initialization data.
    var evt = new Event() {
        type = EventType.KeyDownEvent,
        keyCode = code,
        character = character,
        modifiers = modifiers
    };

    using (KeyDownEvent keyDownEvent = KeyDownEvent.GetPooled(evt))
    {
        panel.visualTree.SendEvent(keyDownEvent);
    }
}

Важно: Не отправлять события, которые находятся вне операционной системы или не присутствуют в UnityEngine.Event типы. Некоторые события UI Toolkit отправляет в ответ на изменения внутреннего состояния. Внешние процессы такие события отправлять не должны. Например, если вы отправите PointerCaptureEvent, визуальные элементы считают, что базовые условия этого события выполнены, и не будут устанавливать для них захват указателя. Это может нарушить внутренние настройки визуального элемента и привести к неопределённому поведению.

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