Синтез и отправка событий
Прежде чем синтезировать и отправить пользовательские события, изучите как UI Toolkit event system распределяет и отправляет события операционной системы.
UI Toolkit отправляет события визуальным элементам через панель. Если событие не имеет назначения, оно отправляется в корневой элемент панели. Чтобы иметь путь распространения, элемент должен иметь назначение, и отправитель должен задать это назначение заранее. Некоторые типы событий не нуждаются в назначении. Например, события клавиатуры отправляются в фокусированный элемент, а события указателя отправляются в элемент под указателем.
Система событий использует пул событий, чтобы избежать повторного выделения объектов событий.
Чтобы синтезировать и отправить собственные события:
- Получение объекта события из пула событий.
- Заполните свойства события.
- Заключите событие в блок
using, чтобы оно было возвращено в пул событий. - Передайте событие
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, визуальные элементы считают, что базовые условия этого события выполнены, и не будут устанавливать для них захват указателя. Это может нарушить внутренние настройки визуального элемента и привести к неопределённому поведению.