Включите естественный ввод для всех форм-факторов

Настольный компьютер с клавиатурой и мышью. Игра отображается на экране, на котором показаны сенсорные элементы управления направлением и мышью.
Рисунок 1. Ввод с клавиатуры, мыши и сенсорного экрана.

Устройства Android бывают разных форм и размеров. Расширьте возможности своей игры, предоставив игрокам возможность играть где угодно, будь то телефон, планшет, ПК, телевизор, автомобиль или гарнитура XR. Здесь вы узнаете:

Автоматическая совместимость

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

  • dispatchTouchEvent / onTouchEvent реагирует на события движения даже при щелчках или вводе стилусом. Это означает, что если вы не отметите тип инструмента , ваша логика обработки сенсорного ввода должна работать с мышью и стилусом.
  • Некоторые необработанные события геймпада и контроллера телевизора повторно отправляются как события клавиатуры.
  • Форм-факторы, подобные ПК, такие как Play Games и ChromeOS, по умолчанию генерируют касания с помощью щелчков мыши. Поскольку сенсорного экрана, на который можно было бы опереться, может не быть, это обеспечивает базовый уровень совместимости.

  • События мыши и стилуса отправляются в обратные вызовы касания.

  • Необработанные события геймпада и контроллера телевизора повторно отправляются как события клавиатуры .

  • Форм-факторы, подобные ПК, такие как Play Games и ChromeOS, по умолчанию генерируют события касания, а не события мыши, чтобы максимизировать совместимость с играми, ожидающими ввода с сенсорного экрана.

Для лучшего взаимодействия с пользователем реализуйте прямую поддержку несенсорного ввода, а не полагайтесь на автоматическую совместимость.

Поддержка всех форм-факторов

Android работает на постоянно растущем списке устройств. Независимо от того, разворачивают ли ваши игроки свой телефон в планшет с большим экраном, включают телевизор с поддержкой Android, открывают игру для Android на своем Chromebook или запускают быструю игру в машине, ожидая зарядки, вы можете вовлечь своих игроков в большее местах и ​​на большем количестве дисплеев, чем когда-либо прежде. Вам просто нужно убедиться, что в вашу игру можно играть там, где находятся ваши игроки:

Форм-фактор Типичный ввод по умолчанию Сенсорный экран Мышь и клавиатура Геймпад Стилус 1 5-позиционная крестовина
Телефон Сенсорный экран Да Да Да Да Да
Большой экран Сенсорный экран Да Да Да Да Да
ПК 2 Мышь и клавиатура Нет Да Да Нет Нет
ХромОС 3 Тачпад, мышь и клавиатура Иногда Да Да Да Да
ТВ 5-позиционная крестовина Нет Да Да Нет Да
Автомобили 4
(Автомобильная ОС)
Сенсорный экран Да Да Да Нет Да
Смотреть 5 Сенсорный экран Да Нет Нет Нет Нет

Эта таблица призвана помочь вам определить приоритетность поддержки новых механизмов ввода, выделив ожидаемый ввод для каждого форм-фактора. Имейте в виду, что вам следует:

  • Избегайте использования одного механизма ввода по умолчанию. Это может непреднамеренно ограничить возможности ваших бессенсорных действий. Например, хотя большинство игроков хотят играть в игры ChromeOS с помощью мыши и клавиатуры, некоторым все же может потребоваться поддержка сенсорного экрана в зависимости от профиля их устройства.
  • Избегайте блокировки механизмов ввода для форм-факторов. Android работает с широким спектром периферийных устройств, а гибридные устройства становятся все более популярными. Удаление поддержки клавиатуры из сборки вашего телефона может сделать вашу игру неполной, если у игрока есть планшет со съемной клавиатурой.

Ввод мыши

Самый большой и захватывающий экран игрока может работать под управлением Android, будь то ноутбук с ChromeOS, планшет Android или ПК. Игроки часто ожидают, что будут играть на этих устройствах с помощью мыши, и добавление поддержки может повысить вовлеченность игроков. Android поддерживает типичные функции, характерные для настольных операционных систем, в том числе:

  • Поддержка щелчка левой, правой и средней кнопкой мыши, а также дополнительных кнопок, таких как «Назад» и «Вперед».
  • Обнаружение колеса прокрутки
  • Либо абсолютные, либо относительные (также известные как захват указателя ) отчеты о движении мыши.
  • Возможность определять собственные значки указателей.

Существуют руководства по конкретным форм-факторам для:

Ввод сенсорной панели

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

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

Чтобы определить, использует ли ваш проигрыватель мышь или сенсорную панель во время захвата указателя, проверьте исходные значения из InputDevice#getSources() или MotionEvent#getSource() для InputDevice.SOURCE_TOUCHPAD .

Ввод с клавиатуры

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

Некоторые распространенные способы улучшить вашу игру с помощью клавиатуры:

  • Для устройств без сенсорного управления механика мультитач должна быть сопоставлена ​​с клавиатурой. В играх, требующих двух или более одновременных касаний, таких как перемещение и прыжки, выгодно сопоставить эти действия с нажатиями клавиатуры, чтобы улучшить играбельность на больших экранах и экранах без сенсорного управления.
  • Сделайте меню доступными для навигации с помощью клавиатуры. Добавление кнопок навигации, таких как клавиши со стрелками и Enter , в меню и статические элементы игрового процесса позволяет играть в игры на телевизорах и повышает доступность для всех форм-факторов.
  • Добавьте горячие клавиши для действий на экране. Сопоставьте все, что игрок может коснуться на экране, с действием клавиатуры. Быстрый доступ к таким действиям, как выбор юнитов в стратегической игре или активация слотов инвентаря в экшн-игре, позволит вашим игрокам погрузиться в игру.

Помните, что хотя QWERTY-клавиатуры довольно распространены, существует множество различных популярных раскладок, и некоторые символы, которые представляют собой одно нажатие клавиши в одной раскладке, могут быть аккордом в другой.

Если ваша игра использует относительное положение клавиш для выполнения действий, например, использование W , A , S и D как клавиш со стрелками для перемещения, используйте InputDevice.getKeyCodeforKeyLocation() , чтобы сопоставить расположение клавиши QWERTY с кодом клавиши в KeyEvent.getKeyCode() . Если макет проигрывателя когда-либо изменится, вызывается onInputDeviceChanged() .

При добавлении текстовой записи в игру TextInput в GameActivity предоставляет механизм для надежной обработки ввода IME, диакритических знаков или других изменений макета, зависящих от региона, при этом используя внутриигровой механизм рендеринга текста. Это позволяет избежать многих ошибок при прямой обработке ввода с клавиатуры или использовании внеэкранного виджета EditText .

Вход для геймпада

Изображение типичного геймпада. Он имеет панель управления, четыре лицевые кнопки с обозначениями a, b, x и y, два аналоговых джойстика и четыре триггера. На изображении есть номера, но на этой странице они не указаны.
Рисунок 2. Входы геймпада.

Геймпады официально поддерживаются в Android , включая события подключения и отключения, тактильную поддержку , расширенную поддержку ввода, включая гироскопы , и поддержку вывода, например светового цвета , если таковая имеется.

Разработчики приложений могут прослушивать входные данные геймпада через обратные вызовы View или Activity , но разработчикам игр рекомендуется использовать библиотеку игровых контроллеров , которая:

  • Написан на C++ для облегчения интеграции в ваш собственный игровой движок.
  • Централизует все функции геймпада в одном API.
  • Устраняет неоднозначность символов на лицевых кнопках геймпада, поэтому метки вашей игры могут соответствовать геймпаду игрока.
  • Унифицирует отчеты о событиях геймпада в тех случаях, когда кнопки являются аналоговыми входами на некоторых геймпадах, но двоичными входами на других.
  • Обеспечивает ограниченную совместимость на старых устройствах Android с новыми геймпадами.

Ввод стилусом

Изображение приложения для рисования. Кисти открыты, показывая фигуры, которые можно нарисовать стилусом.
Рисунок 3. Приложение для рисования с палитрой кистей.

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

Когда рендеринг отстает от движения стилуса, задержка более очевидна, чем при блокировке пальцем или отключении от экрана, например, при использовании клавиатуры, мыши или геймпада. По этой причине Android предоставляет конвейер с низкой задержкой для рендеринга штрихов с задержкой всего 4 мс от движения пера до отображения на экране. Есть три способа, которыми ваша игра может воспользоваться этой возможностью, чтобы ваша игра чувствовала прямую связь с реальным миром:

ТВ-контроллеры

Изображение контроллера телевизора для Android. Вызываются D-pad, кнопка выбора, кнопка микрофона или помощника, кнопка «Назад» и кнопка «Домой».
Рисунок 4. ТВ-контроллер.

Устройства Android TV поставляются с пультом дистанционного управления, который включает в себя 5-позиционную крестовину , которая включает четыре основных направления и кнопку ОК . Приложения, использующие встроенную систему виджетов Android, поддерживают их по умолчанию, но разработчики должны протестировать пользовательские виджеты своей игры, чтобы обеспечить совместимость с телевизионными устройствами.

Дополнительную информацию см. в документации Android TV .

Дополнительные соображения

Чтобы предоставить вашим игрокам наилучшие впечатления, проектируйте несколько форм ввода и переключайтесь между ними на лету. Таким образом, игрок может быстро переключаться между различными методами ввода в зависимости от игрового режима, в котором он находится, или игра может легко переключаться между различными конфигурациями одного устройства на базе Android.

Имея это в виду, обратите внимание, что:

  • Проверка наличия того или иного входа лучше, чем фильтрация по форм-фактору . Например, если вы включите поддержку только мыши и клавиатуры в ChromeOS, игроки на планшетах со съемной клавиатурой не получат выгоды от ваших дополнительных усилий.
  • Существуют факторы, выходящие за рамки форм-фактора, которые влияют на наилучшую форму ввода . Например, потребности игрока в специальных возможностях могут сделать использование мыши или сенсорного экрана трудным или болезненным, а геймпад или клавиатура — идеальным вариантом.
  • Любая поддержка лучше, чем ее отсутствие . Идеально реагировать на изменения ввода на лету, но игроки ценят некоторую поддержку, а не ее отсутствие, если они могут к ней добраться.
  • Лучший ввод может меняться между запусками вашей игры . Например, сенсорный экран предпочтителен, когда вы играете в игру на ходу, геймпад, когда телефон подключен к телевизору, а мышь и клавиатура, когда вы сидите за столом.

Как реагировать на действия пользователя

Типичные мобильные игры поддерживают одного игрока на одно устройство. Для достижения наилучших результатов игра реагирует на все возможные входные данные и меняет пользовательский интерфейс в зависимости от того, что игрок активно использует. Таким образом, одна версия игры автоматически работает во всех форм-факторах, и игроки могут даже комбинировать и сопоставлять входные данные в соответствии со своими потребностями.

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

  • Поскольку большинство игроков играют на сенсорных экранах, при запуске отображайте сенсорное управление. Если игрок начинает играть на клавиатуре или геймпаде и какое-то время не использует сенсорный экран, уберите сенсорный слой.
  • Если игрок использует геймпад и нажимает клавишу на клавиатуре, измените игровые подсказки, чтобы вместо кнопок геймпада отображались кнопки клавиатуры.
  • Когда игрок одновременно использует клавиатуру и геймпад, встройте задержку перед переключением пользовательского интерфейса с одного набора подсказок на другой, чтобы избежать мерцания дисплея.
  • Проверьте тип источника входных данных при обработке входных данных; Клавиши клавиатуры и кнопки геймпада генерируют события нажатия клавиш.
  • Старайтесь не отмечать ввод как обработанный, если ваша игра не может его обработать. Android повторно генерирует некоторые события для облегчения совместимости с новыми форм-факторами, например, превращая кнопку A геймпада в кнопку ОК .

Аннотируйте поддержку ввода в вашем манифесте

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

  • android.hardware.type.pc : отключите уровни совместимости ввода как на ChromeOS, так и на ПК, чтобы разработчики могли напрямую обрабатывать события мыши . Установите android:required="false" , чтобы игра по-прежнему доставлялась на телефоны.
  • android.hardware.gamepad : приложения и игры получают события геймпада независимо от того, поддерживают ли они геймпады или нет. Если вы определите этот флаг манифеста и установите android:required="false" ваша игра будет транслироваться на устройствах Android TV с подключенными геймпадами.

  1. Производители могут встроить поддержку стилуса в некоторые устройства, но не существует форм-фактора, в котором поддержка была бы гарантирована. Блокноты для рисования можно подключить к устройству Android и использовать в качестве стилуса.

  2. Хотя некоторые ПК имеют поддержку сенсорного экрана и стилуса, клиент Google Play Games реагирует только на события мыши из операционной системы хоста. Чтобы обеспечить максимальную совместимость, события мыши по умолчанию отображаются в клиенте как события касания. Дополнительную информацию см. в разделе «Ввод с помощью мыши» .

  3. Устройства ChromeOS обычно поддерживают мышь и клавиатуру, но сенсорные экраны не являются обязательными. Многие устройства с сенсорным экраном также поддерживают ввод стилусом.

  4. Android Automotive OS относится к автомобилям со встроенным Android, которые могут работать без телефона Android. Эта диаграмма относится к автомобильным ОС. Android Auto проецирует приложение с телефона на автомобиль, а устройства, поддерживающие Android Auto (проецирование), могут не иметь сенсорного экрана.

  5. Устройства Wear OS имеют ограниченные возможности подключения. Вы можете выполнить поиск периферийных устройств Bluetooth, но ОС часто не может подключиться.