Общая схема работы

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

Раскладка управления состоит из произвольного количества элементов управления. В элементе управления сначала происходят вычисления состояний всех InputComponentController-ов, затем они собираются в InputHubController, затем общее значение по необходимости корректируется компонентом InputPostprocessController и отправляется во внешний компонент управления аватаром.

Input component controller

Класс InputComponentController является базовым для всех компонентов аппаратного ввода. Стандарт включает в себя минимальный набор компонентов аппаратного ввода, которые условно разделены на две группы: механические (mechanical) и сенсорные (touchscreen). Дерево наследования выглядит следующим образом:

В наследниках класса InputComponentController производится привязка к кнопкам/осям устройства ввода и настройка различных параметров ввода (такие как чувствительность, инверсия и др.). Например, компонент MechanicalDirection2DController, настроенный на приём ввода с геймпада, выглядит следующим образом:

Input hub controller

Компонент InputHubController является агрегатором всех компонентов InputComponentController для элемента управления. Как видно из общей схемы, InputHubController поддерживает до четырёх аппаратных вариаций управления (то есть клавиатуру, мышь, геймпад и тачскрин). В зависимости от того, какой из компонентов InputComponentController является активным, InputHubController берёт соответствующие данные ввода и определяет режим ввода. Если несколько компонентов InputComponentController оказываются активными, то InputHubController выбирает приоритетный исходя из установленного порядка:

  1. Touchscreen
  2. Gamepad
  3. Mouse
  4. Keyboard

Помимо четырёх ссылок на компоненты ввода различных устройств, InputHubController также имеет свойство-перечисление inputMode, значение которого указывает на текущее активное устройство ввода и событие OnInputModeChanged, срабатывающее в момент переключения активного устройства ввода. В редакторе InputHubController выглядит следующим образом: