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

Система событий времени выполнения UI и обработка ввода

UI Toolkit использует систему событий для обработки ввода и отправки событий на все активные панели. Эта система обрабатывает ввод событий и отправляет их на соответствующие элементы в UI.

Когда вы вступаете в режим воспроизведения, UI Toolkit создает систему событий по умолчанию, которая не является частью ни одной сцены, и обеспечивает базовую поддержку большинства устройств ввода. Эта система событий по умолчанию используется, если нет другой активной системы событий, которая может заменить ее.

См. Использование UI Toolkit и uGUI с разными системами ввода для получения дополнительной информации о том, как использовать компоненты EventSystem для замены системы событий по умолчанию UI Toolkit.

Используйте UI Toolkit с различными системами ввода

Unity обеспечивает две системы обработки вводимых данных: Менеджер ввода и новые Input System пакет. Менеджер ввода является частью ядра Unity платформа и служит в качестве системы по умолчанию, если вы не установите Input System пакет. Новый Input System пакет обеспечивает большую гибкость и более широкую поддержку для приборов и платформ.

Если вы используете Unity 6000.0+, ваш проект может уже включать Input System пакет — например, когда вы создаете проект из шаблона, который добавляет его. Наличие пакета в проекте само по себе не изменяет ввод времени выполнения на новый Input System. Чтобы просмотреть или изменить Unity использует во время выполнения, набор Активная обработка ввода в Игрок настройки, как описано в Установить активную систему обработки ввода.

Система событий по умолчанию UI Toolkit может получать события от обеих систем ввода. Она автоматически обнаруживает активную систему обработки ввода и соответственно обрабатывает события.

Установить активную систему обработки ввода

Чтобы установить активную систему обработки ввода в вашем проекте:

  1. Выбрать Изменить > Project Настройки > Игрок.

  2. В окне Игрок в разделе Другие настройки > Конфигурацияустановите Active Input Handling на один из следующих параметров:

    • Менеджер ввода (Старый): Используйте устаревший Менеджер ввода.
    • Input System Пакет (Новый): Используйте пакет Input System.
    • Оба: Используйте пакет Input System, если он доступен, в противном случае возвращайтесь к старому менеджеру ввода.

Если пакет Input System активен в вашем проекте, UI Toolkit автоматически получает свои события от действий, определенных в системе ввода. Чтобы настроить эти действия, перейдите в Изменить > Project Настройки > Input System Пакет.

Настройка обработки ввода с помощью диспетчера ввода

Чтобы настроить обработку ввода с помощью Диспетчера ввода, перейдите в Изменить > Project Настройки > Диспетчер ввода.

Параметры диспетчера ввода
Параметры диспетчера ввода

Вы можете настроить Горизонтальную и Вертикальную оси, чтобы повлиять на то, как NavigationMoveEvents генерируются в UI Toolkit. Вы также можете изменить действия Подать и Отменить для генерации NavigationSubmitEvent и NavigationCancelEvent в UI Toolkit.

Настройка обработки ввода с помощью пакета Input System

Чтобы настроить обработку ввода с пакетом Input System, перейдите в Изменить > Project Настройки > Input System Пакет.

Настройки Input System
Настройки Input System

Пакет Input System предлагает расширенную конфигурацию по сравнению с Диспетчером ввода. Вы можете использовать ресурс действий для всего проекта, чтобы настроить, как NavigationMoveEvents, PointerMoveEvent (действие UI / Point), PointerDownEvent, PointerUpEvent (действие UI / Click), WheelEvent (действие UI / ScrollWheel), NavigationSubmitEventи NavigationCancelEvent генерируются для UI Toolkit.

См. Input System пакета UI Поддержка для получения дополнительной информации о каждом отдельном действии.

Используйте UI Toolkit и uGUI с разными системами ввода

Вы можете использовать UI Toolkit’s UI Документы и материалы uGUI компонентов одновременно. Для этого добавьте EventSystem компонент к сцене с помощью одного из следующих способов:

  • В представлении Hierarchy выберите UI > EventSystem.
  • Создайте любой компонент uGUI.

Когда вы используете UI Toolkit с компонентом EventSystem, вам необходимо выбрать соответствующий модуль ввода для системы ввода, которая активна в вашем проекте.

В следующих таблицах перечислены необходимые компоненты и параметры при использовании UI Toolkit с устаревшим диспетчером ввода, с пакетом Input System или вместе с uGUI.

UI Toolkit с устаревшим менеджером ввода

Использование Необходимые компоненты Активная обработка ввода
UI Toolkit только (в сцене нет uGUI EventSystem) Система событий по умолчанию (не требуется компонент сцены) Менеджер ввода (старый)
UI Toolkit и uGUI A Автономный входной модуль и EventSystem компонент Менеджер ввода (Старый) или Оба

UI Toolkit с пакетом Input System

Использование Необходимые компоненты Активная обработка ввода
UI Toolkit только (в сцене нет uGUI EventSystem) Система событий по умолчанию (не требуется компонент сцены) Input System Пакет (новая) или Оба
UI Toolkit и uGUI Ан Input System UI Входной модуль и EventSystem компонент Input System Пакет (новая) или Оба

UI Toolkit с uGUI (устаревший менеджер ввода или пакет Input System)

Используйте эту таблицу, когда вы смешиваете UI Toolkit с uGUI и вам нужны EventSystem в сцене. Сопоставьте модуль ввода с Active Input Handling в настройках Игрок.

Активный ввод Необходимые компоненты Активная обработка ввода
Старый менеджер ввода A Автономный входной модуль и EventSystem компонент Менеджер ввода (Старый) или Оба
Input System пакет Ан Input System UI Входной модуль и EventSystem компонент Input System Пакет (новая) или Оба

EventSystem модули настройки и ввода

Когда вы добавляете свой первый uGUI элемент к сцене, а EventSystem и a Автономный входной модуль автоматически добавляются в сцену.

EventSystem принадлежит uGUI. Он отвечает за события uGUI, полученные либо из устаревшего Input Manager, либо из пакета Input System, через взаимозаменяемый компонент Input Module.

Standalone Input Module отправляет события элементам UI Toolkit.

Если проект включает пакет Input System и для Active Input Handling выбрано Input System Package (New) или Оба, Unity добавляет Input System UI Input Module вместо Standalone Input Module. Компонент Input System UI Input Module и сопровождающий его EventSystem обеспечивают правильную диспетчеризацию событий как от элементов UI Toolkit, так и от элементов uGUI.

EventSystem отвечает за чтение сцены и выполнение событий, в то время как Input System UI Модуль ввода обрабатывает ввод и инициирует выполнение события. Вы можете заменить Автономный Модуль Ввода или Input System UI Модуль Ввода другими модулями ввода, которые могут изменить тип потребляемого ввода. Независимо от используемого модуля ввода, все события выполняются через EventSystem.

Компоненты моста и встроенный вход

Если вы добавите и включите uGUI EventSystem в сцене, UI Toolkit обнаружит его и создаст два uGUI-совместимых компонента для каждой панели UI Toolkit: PanelRaycaster и PanelEventHandler. Эти компоненты служат посредниками между событиями uGUI и событиями UI Toolkit. Присутствие этих компонентов отключает автоматическую, встроенную обработку ввода UI Toolkit. Это означает, что UI Toolkit полагается на эти компоненты для обработки ввода событий, когда они присутствуют.

Маршрутизация указателя, порядок панели и фокус

Если сцена использует более одного ассета Panel Settings, система событий отправляет события указателя на их панели в соответствии с их порядком сортировки. UI Toolkit определяет получателя событий указателя, сравнивая порядок сортировки своей панели с порядком сортировки uGUI холстов и других действительных целей raycast. Этот процесс решает, будет ли элемент UI Toolkit, объект uGUI или другой объект в сцене получать событие. Аналогичным образом, UI Toolkit использует currentSelectedGameObject из EventSystem для управления фокусом. Когда панель UI Toolkit хочет получить фокус, она снимает фокус с других объектов uGUI, и когда объект uGUI выбирается, панели UI Toolkit автоматически теряют фокус.

Событие указателя распространяется по панелям до тех пор, пока панель не отреагирует на него. Первая панель, которая использует событие для воздействия на фокусируемый элемент, становится фокусируемой панелью для системы событий. Эта панель продолжает получать события клавиатуры до тех пор, пока другое событие не приведет к тому, что фокусируемой панелью станет другая панель.

Поведение фокуса и запросы на задержку фокуса

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

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

public class FocusOnNextFrameExample : MonoBehaviour
{
    void OnEnable()
    {
        var root = GetComponent<UIDocument>().rootVisualElement;
        root.Q<Button>("my-button").clicked += () =>
        {
            root.schedule.Execute(() => root.Q<TextField>("my-text-field").Focus());
        };
    }
}

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