Фон
Pixonic , команда разработчиков видеоигр со штаб-квартирой в Москве, гордится тем, что использует любую возможность обновить свои мобильные приложения и охватить еще более широкую аудиторию геймеров. Одна из самых известных игр компании — War Robots , игра «Игрок против игрока» (PvP) для 12 человек, в которой игроки управляют и сражаются с настроенными роботами на живом поле битвы.
Выпущенная в 2014 году игра War Robots изначально была разработана для устройств Android раннего поколения с управлением на основе сенсорной панели и без ввода данных с помощью мыши. Команда Pixonic, сама будучи заядлыми геймерами, осознала, что приложение нуждается в некоторых модификациях, чтобы обеспечить удобство использования на более широком спектре устройств, таких как ноутбуки и планшеты. В War Robots уже можно было играть на любом устройстве Android, поскольку Chromebook запускает полную версию платформы Android внутри контейнера. Внеся еще несколько изменений в код, Pixonic смогла воспользоваться всеми возможностями ChromeOS.
Вот как команда Pixonic оптимизировала War Robots для оптимального взаимодействия на больших экранах.
Что они сделали
Чтобы начать оптимизацию, Pixonic добавила тег метаданных в AndroidManifest.xml, который сообщает системе, что она готова к полной поддержке ChromeOS и ей необходимо отключить эмуляцию сенсорного ввода:
<uses-feature android:name="android.hardware.type.pc" android:required="false" />
Pixonic также установила для minSdk приложения значение 24, чтобы игровой движок Unity мог напрямую получать щелчки мыши и все события API, связанные с движением (а не только события сенсорной панели).
Поддержка клавиатуры и мыши
В PvP-играх от третьего лица, таких как War Robots, перемещаться и прицеливаться намного проще с помощью клавиатуры и мыши, особенно на устройствах с большим экраном. Итак, следующим шагом было переписать код поддержки клавиатуры и мыши для боевого режима игры, сохранив при этом управление с помощью сенсорного экрана.
Чтобы обеспечить нужные элементы управления в нужное время, команда Pixonic написала новый код для проверки текущего игрового режима пользователя:
@Override
public void onConfigurationChanged(Configuration newConfig) {
boolean hasQwertyKeyboard = newConfig.keyboard == Configuration.KEYBOARD_QWERTY && newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO;
try {
UnityPlayer.UnitySendMessage("Receiver", "ConfigChange", new JSONObject().put("keyboard", hasQwertyKeyboard).toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
Если обнаружена QWERTY-клавиатура, игра адаптируется к режиму рабочего стола. Джойстик движения в левом нижнем углу исчезает, а все доступные действия (например, сортировка оружия, способностей и меню) помечаются сочетаниями клавиш.
Если клавиатура не обнаружена, джойстик перемещения отображается в левом нижнем углу, а сочетания клавиш скрыты на кнопках меню в правом нижнем углу.
Затем Pixonic хотела убедиться, что курсор остается скрытым, когда игрок использует мышь для поворота камеры. Ориентируясь на Android 7.0 (уровень API 24) или выше, команда могла установить любой значок указателя. В этом случае команда использовала прозрачное растровое изображение, чтобы сделать курсор невидимым во время игры:
public boolean setPointerVisibility(boolean visible) {
View = activity.findViewById(android.R.id.content);
view.setPointerIcon(PointerIcon.getSystemIcon(activity, visible ? PointerIcon.TYPE_DEFAULT : PointerIcon.TYPE_NULL));
}
Это гарантировало, что курсор будет отключен и невидим, когда все остальные окна закрыты и идет битва. Если появляются какие-либо всплывающие окна, например меню паузы, Pixonic делает курсор видимым, отображая его значок по умолчанию.
Адаптация учебных пособий и механики игрового процесса
Для лучшего взаимодействия с пользователем Pixonic также написала новый код для отображения различных обучающих материалов по игровому процессу в зависимости от текущего режима устройства пользователя. Если во время боя игрок переключается между игровым процессом на планшете и ноутбуке и еще не видел обучение для другого режима, оно отображается перед возобновлением игры.
Когда игроки находятся в режиме ноутбука, Pixonic также отключает управление камерой с сенсорным экраном (поскольку игроки будут управлять камерой с помощью мыши), в то время как все кнопки игрового процесса работают как обычно. Чтобы отличить прикосновения от движений мыши, команда использует свойство Input.touchCount
(в скриптах Unity):
if(Input.touchCount > 0) {
// this is screen touch event
} else {
// this is mouse (touchpad) event
}
Поддержка нескольких окон
На последнем этапе Pixonic хотела убедиться, что игра не блокируется в полноэкранном режиме при запуске. Включение оконного игрового процесса в ChromeOS позволяет пользователям одновременно смотреть любимые стримеры во время игры, улучшать своих роботов, читая о новых способностях на сайте игры , или наблюдать за боем в пассивном режиме, просматривая отдельное видео.
Для этого Pixonic пометил UnityPlayerActivity
как изменяемый размер:
<activity android:name="com.unity3d.player.UnityPlayerActivity" ....
android:resizeableActivity="true">
Принимая во внимание, что интерфейс игры выглядит играбельным только в определенном диапазоне размеров, команда установила минимальные поддерживаемые размеры окон:
<activity … >
<layout android:gravity="center" android:minHeight="800dp" android:minWidth="1200dp" />
</activity>
Для максимально захватывающего игрового процесса Pixonic использовала метатеги, чтобы установить полноэкранный режим по умолчанию и альбомную ориентацию по желанию.
<application>
<meta-data android:name="WindowManagerPreference:FreeformWindowSize" android:value="maximize" />
<meta-data android:name="WindowManagerPreference:FreeformWindowOrientation" android:value="landscape" />
….
</application>
Эти оптимизации также гарантировали, что игра не будет приостанавливаться и что боевой HUD будет соответствующим образом масштабироваться по мере того, как игроки расширяют и сжимают свои игровые окна.
Результаты
Благодаря обширной библиотеке онлайн-ресурсов весь процесс занял у команды разработчиков Pixonic из пяти человек всего две недели.
Более 100 000 игроков уже сыграли в War Robots на ChromeOS с тех пор, как Pixonic представила последние оптимизации. Поскольку игровой процесс теперь может использовать дополнительное пространство на больших экранах, сражения War Robots стали еще более захватывающими и захватывающими, чем раньше. Фактически, пользовательские сеансы на Chromebook на 25% дольше по сравнению с другими устройствами Android. Первые отзывы были невероятно положительными, и некоторые игроки даже отметили, что игра, оптимизированная для Chromebook, работает более плавно, чем эмулятор BlueStacks.
Основываясь на своем успехе, разработчики Pixonic планируют обновить графику War Robots на всех устройствах Android, чтобы сделать игровой процесс еще ближе к качеству ПК.
Ознакомьтесь с некоторыми рекомендациями по оптимизации приложений для ChromeOS .