Устройства Android бывают разных форм и размеров. Расширьте охват игры, позволив пользователям играть на любом устройстве, будь то телефон, планшет, ПК, телевизор, автомобиль или XR-шлем. Вы узнаете:
- Как поддержка мыши и клавиатуры позволяет запускать игру на ПК и ChromeOS, а также повышает удобство на устройствах с большим экраном.
- Как привлечь самых преданных игроков с помощью интеграции геймпада.
- Как добавить поддержку стилуса, чтобы обеспечить точное и быстрое управление в играх на мобильных устройствах.
- Как добавить поддержку контроллера для телевизора и открыть для игроков самый большой экран в доме.
- Рекомендации по дизайну, касающиеся переключения между способами ввода.
- Что делают разработчики кроссплатформенных игр, чтобы поддерживать разные способы ввода.
- и многое другое.
Автоматическая совместимость
Android автоматически поддерживает управление без прикосновений, когда это возможно. Например:
dispatchTouchEvent/onTouchEventреагируют на события движения даже при кликах или вводе стилусом. Это означает, что если вы не проверите тип инструмента, ваша логика обработки касаний должна работать с мышью и стилусом.- Некоторые необработанные события геймпада и пульта ДУ телевизора повторно передаются как события клавиатуры.
На устройствах с форм-фактором ПК, таких как Play Games и ChromeOS, по умолчанию касания генерируются при кликах мышью. Поскольку сенсорный экран может отсутствовать, это обеспечивает базовый уровень совместимости.
События мыши и стилуса отправляются в обратные вызовы касания.
Необработанные события геймпада и контроллера телевизора повторно передаются как события клавиатуры.
На устройствах с форм-фактором ПК, например в Google Play Играх и ChromeOS, по умолчанию генерируются события касания, а не события мыши. Это сделано для максимальной совместимости с играми, в которых ожидается ввод с сенсорного экрана.
Чтобы пользователям было удобнее, реализуйте прямую поддержку ввода без сенсорного экрана, а не полагайтесь на автоматическую совместимость.
Поддержка всех типов устройств
Android работает на постоянно растущем списке устройств. Теперь вы можете привлекать игроков на самых разных устройствах: телефонах, планшетах, телевизорах с Android, Chromebook и даже автомобилях. Вам нужно лишь убедиться, что игра доступна в странах, где находятся ваши пользователи.
| Тип устройства | Стандартные входные данные по умолчанию | Сенсорный экран | Мышь и клавиатура | Геймпад | Стилус1 | 5-позиционная крестовина |
|---|---|---|---|---|---|---|
| Телефон | Сенсорный экран | Да | Да | Да | Да | Да |
| Большой экран | Сенсорный экран | Да | Да | Да | Да | Да |
| PC2 | Мышь и клавиатура | Нет | Да | Да | Нет | Нет |
| ChromeOS3 | Сенсорная панель, мышь и клавиатура | Иногда | Да | Да | Да | Да |
| Телевидение | 5-позиционная крестовина | Нет | Да | Да | Нет | Да |
| Автомобили4 (Automotive OS) |
Сенсорный экран | Да | Да | Да | Нет | Да |
| Смотреть5 | Сенсорный экран | Да | Нет | Нет | Нет | Нет |
Эта таблица поможет вам определить, какие способы ввода нужно поддерживать в первую очередь, поскольку в ней указаны ожидаемые способы ввода для каждого форм-фактора. Помните, что вам нужно:
- Не используйте только один способ ввода по умолчанию. В противном случае вы можете случайно ограничить охват рекламы, не связанной с касаниями. Например, большинство игроков предпочитают использовать мышь и клавиатуру, но некоторые могут захотеть играть с помощью сенсорного экрана, если их устройство поддерживает эту функцию.
- Не привязывайте способы ввода к типам устройств. Android поддерживает множество периферийных устройств, а гибридные устройства становятся все популярнее. Если вы уберете поддержку клавиатуры из сборки для телефонов, у пользователей планшетов со съемной клавиатурой может возникнуть ощущение, что игра не доработана.
Управление мышью
Самый большой экран, на котором пользователь играет в игры, может работать на Android. Это может быть ноутбук с ChromeOS, планшет Android или ПК. Игроки часто ожидают, что на таких устройствах можно играть с помощью мыши, и добавление поддержки может повысить вовлеченность игроков. Android поддерживает стандартные функции, характерные для ОС для компьютеров, в том числе:
- Поддержка левой, правой и средней кнопок мыши, а также дополнительных кнопок, например Назад и Вперед.
- Обнаружение колеса прокрутки
- абсолютное или относительное (также известное как захват указателя) отслеживание движения мыши;
- Возможность задавать собственные значки указателя.
Руководства по типам устройств:
Ввод с сенсорной панели
Захват ввода с сенсорной панели на Android немного отличается от поддержки мыши. При вызове requestPointerCapture() вы запрашиваете необработанные данные о касаниях сенсорной панели. Это означает, что вы получаете события для каждого касания так же, как и события мультитач с сенсорного экрана, за исключением того, что координаты находятся в пространстве координат сенсорной панели, а не дисплея. В этом режиме отключены встроенные в Android функции распознавания жестов на сенсорной панели и фильтрации касаний ладонью. Например, если пользователь перемещает один палец по сенсорной панели, а большой палец держит в левом нижнем углу, чтобы нажать кнопку, игра должна определить, движение какого пальца следует использовать в логике (например, для перемещения камеры).
Это значит, что геймпады со встроенными сенсорными панелями можно использовать как сенсорный экран для ввода жестами.
Чтобы определить, использует ли проигрыватель мышь или сенсорную панель при захвате указателя, проверьте значения источника из InputDevice#getSources() или MotionEvent#getSource() для InputDevice.SOURCE_TOUCHPAD.
Ввод с клавиатуры
Поддержка клавиатуры есть практически на всех устройствах Android. В зависимости от типа игры добавление поддержки клавиатуры может помочь вам расширить аудиторию, сделав игру более доступной, или сделать ее более увлекательной и интуитивно понятной.
Вот несколько способов улучшить игру с помощью поддержки клавиатуры:
- Для устройств без сенсорного экрана необходимо настроить управление жестами на клавиатуре. В играх, где нужно одновременно выполнять два или более действий, например двигаться и прыгать, можно назначить эти действия на клавиши клавиатуры, чтобы было удобнее играть на большом экране без сенсорного управления.
- Обеспечьте возможность навигации по меню с помощью клавиатуры. Добавьте в меню и статические элементы управления навигацию с помощью кнопок, например клавиш со стрелками и Ввод. Это позволит играть на телевизоре и улучшит доступность на всех типах устройств.
- Добавьте горячие клавиши для действий на экране. Сопоставьте любое действие, которое игрок может выполнить на экране, с клавишей на клавиатуре. Быстрый доступ к действиям, таким как выбор юнитов в стратегии или активация слотов инвентаря в экшене, позволяет игрокам полностью погрузиться в игровой процесс.
Помните, что хотя раскладка QWERTY довольно распространена, существует множество других популярных раскладок, и некоторые символы, которые в одной раскладке вводятся одним нажатием клавиши, в другой могут вводиться сочетанием клавиш.
Если в вашей игре для выполнения действий используется относительное позиционирование клавиш, например W, A, S и D как клавиши со стрелками для перемещения, используйте InputDevice.getKeyCodeforKeyLocation(), чтобы сопоставить положение клавиши QWERTY с кодом клавиши в KeyEvent.getKeyCode(). Если макет проигрывателя меняется, вызывается метод onInputDeviceChanged().
Если вы хотите добавить в игру ввод текста, используйте TextInput в GameActivity. Этот механизм позволяет надежно обрабатывать ввод IME, диакритические знаки и другие региональные особенности раскладки, используя при этом игровой движок рендеринга текста. Это позволяет избежать многих проблем, связанных с обработкой ввода с клавиатуры напрямую или с использованием виджета EditText за пределами экрана.
Ввод с геймпада
Геймпады официально поддерживаются на устройствах Android. В частности, поддерживаются события подключения и отключения, тактильная отдача, расширенные возможности ввода, включая гироскопы, и вывод, например световая индикация (если доступно).
Разработчики приложений могут отслеживать ввод с геймпада с помощью обратных вызовов View или Activity, но разработчикам игр рекомендуется использовать библиотеку игрового контроллера, которая:
- Написан на C++, чтобы его было проще интегрировать в ваш игровой движок.
- Объединяет все функции геймпада в одном API.
- Позволяет различать символы на лицевых кнопках геймпада, чтобы метки в игре соответствовали геймпаду игрока.
- Унифицирует отчеты о событиях геймпада в случаях, когда кнопки могут быть аналоговыми входами на одних геймпадах, но двоичными входами на других.
- Обеспечивает ограниченную совместимость новых геймпадов со старыми устройствами Android.
Ввод с помощью стилуса
Android имеет расширенную поддержку стилуса на большинстве устройств, включая определение давления, ориентации, наклона, наведения и ладони. Для совместимости события стилуса отправляются в обратные вызовы касания, но важно протестировать работу со стилусом на случай, если логика вашего движка отфильтровывает эти события. Полная интеграция подходит для игр с небольшими областями прикосновения или игр, в которых рисование от руки кажется естественным.
Когда отрисовка отстает от движения стилуса, задержка более очевидна, чем когда она заблокирована пальцем или отключена от экрана, как в случае с клавиатурой, мышью или геймпадом. Поэтому в Android предусмотрен конвейер с низкой задержкой для отрисовки штрихов с задержкой всего 4 мс от движения пера до появления на экране. Вот три способа использовать эту функцию, чтобы сделать игру более реалистичной:
- Библиотека Jetpack Ink предоставляет удобный набор инструментов для добавления в любой проект Android адаптивной отрисовки штрихов.
- Если в игре невозможно или нежелательно использовать компонент Kotlin для отрисовки штрихов, доступен полный исходный код C++. Это позволяет разработчикам интегрировать нужные функции непосредственно в свои технологии.
- Для игр, требующих полной пользовательской интеграции, можно выполнять специальную обработку непосредственно в переднем буфере, чтобы максимально повысить скорость отклика и контроль.
Контроллеры для телевизоров
Устройства Android TV поставляются с пультом дистанционного управления с пятипозиционной навигационной кнопкой, которая включает четыре направления и кнопку ОК. Приложения, использующие встроенную систему виджетов Android, поддерживают их по умолчанию, но разработчикам необходимо протестировать собственные виджеты игры, чтобы обеспечить совместимость с телевизорами.
Дополнительную информацию можно найти в документации по Android TV.
Дополнительные сведения
Чтобы игрокам было максимально удобно, предусмотрите несколько способов ввода и возможность переключаться между ними на лету. Это позволяет игроку быстро переключаться между разными способами ввода в зависимости от режима игры, а игре – легко переходить между разными конфигурациями одного устройства Android.
Учитывайте следующее:
- Проверка наличия определенного типа ввода лучше, чем фильтрация по типу устройства. Например, если вы добавите поддержку клавиатуры и мыши только на устройствах с ChromeOS, пользователи планшетов со съемной клавиатурой не смогут воспользоваться этой возможностью.
- На выбор способа ввода влияют не только характеристики устройства. Например, игроку может быть трудно или больно использовать мышь или сенсорный экран, но удобно играть с помощью геймпада или клавиатуры.
- Любая поддержка лучше, чем ее отсутствие. Лучше всего реагировать на изменения ввода на лету, но игроки будут рады любой поддержке, если она доступна.
- Оптимальный способ ввода может меняться от запуска к запуску. Например, сенсорный экран удобен в дороге, геймпад – когда телефон подключен к телевизору, а мышь и клавиатура – когда вы сидите за столом.
Как реагировать на действия пользователя
Обычно мобильные игры поддерживают одного игрока на устройстве. Чтобы игра была максимально удобной, она должна реагировать на все возможные способы ввода и менять интерфейс в зависимости от того, что использует игрок. Таким образом, одна версия игры автоматически работает на всех типах устройств, а игроки могут даже комбинировать способы ввода в соответствии со своими потребностями.
Часто разработчики хотят, чтобы по умолчанию использовался способ ввода со встроенными задержками перед изменением интерфейса. Что это значит
- Поскольку большинство игроков играют на сенсорных экранах, при запуске показывайте сенсорное управление. Если игрок начинает играть с клавиатурой или геймпадом и не использует сенсорный экран в течение некоторого времени, скройте сенсорный слой.
- Если игрок использует геймпад и нажимает клавишу на клавиатуре, в игре должны показываться подсказки для клавиатуры, а не для геймпада.
- Если игрок использует клавиатуру и геймпад одновременно, добавьте задержку перед переключением подсказок в интерфейсе, чтобы избежать мерцания.
- При обработке входных данных проверяйте тип источника ввода. Клавиши клавиатуры и кнопки геймпада вызывают события нажатия клавиши.
- Не помечайте ввод как обработанный, если игра не может его обработать. Android повторно генерирует некоторые события, чтобы обеспечить совместимость с новыми типами устройств. Например, кнопка A на геймпаде может выполнять функцию кнопки OK.
Укажите в манифесте, какие способы ввода поддерживаются
Хотя это и не обязательно, мы рекомендуем добавлять в манифест флаги функций, чтобы указывать, какие типы входных данных обрабатываются. Вот некоторые из них:
android.hardware.type.pcОтключите слои совместимости ввода в ChromeOS и на ПК, чтобы разработчики могли напрямую обрабатывать события мыши. Задайте значениеandroid:required="false", чтобы игра по-прежнему была доступна на телефонах.android.hardware.gamepadПриложения и игры получают события геймпада независимо от того, поддерживают ли они геймпады. Если вы зададите этот флаг манифеста и установите значениеandroid:required="false", ваша игра будет показываться на устройствах Android TV с подключенными геймпадами.
-
Производители могут добавлять поддержку стилуса в некоторые устройства, но она не гарантируется для всех устройств определенного форм-фактора. Графические планшеты можно подключать к устройствам Android. Они будут распознаваться как стилусы. ↩
-
Хотя некоторые ПК поддерживают сенсорный экран и стилус, клиент Google Play Games реагирует только на события мыши из основной операционной системы. Чтобы обеспечить максимальную совместимость, по умолчанию события мыши в клиенте отображаются как события касания. Подробнее о вводе с помощью мыши… ↩
-
Устройства с ChromeOS обычно поддерживают мышь и клавиатуру, но сенсорные экраны не обязательны. Многие устройства с сенсорным экраном также поддерживают ввод с помощью стилуса. ↩
-
Android Automotive OS – это встроенная в автомобиль операционная система, которая может работать без телефона Android. На графике показаны данные для Automotive OS. Android Auto проецирует приложение с телефона на экран автомобиля, и устройства, поддерживающие Android Auto (проекцию), могут не иметь сенсорного экрана. ↩
-
Устройства Wear OS имеют ограниченные возможности подключения. Вы можете сканировать устройства Bluetooth, но ОС часто не удается подключиться к ним. ↩