1. Введение

Последнее обновление: 18.10.2022
Как подготовить игру для Google Play Games на ПК?
Google Play Games упрощает перенос вашей мобильной игры на ПК под управлением Windows. Это означает, что вы можете увеличить вовлеченность игроков и свою аудиторию, не перестраивая архитектуру игры и не меняя бизнес-модель. Тем не менее, вам все же потребуется внести несколько изменений, чтобы обеспечить наилучший игровой опыт для новых игроков на ПК.
Что вы узнаете
В этом практическом занятии рассматриваются основные разделы контрольного списка требований для запуска вашей игры и подготовки вашей игры на Unity для Google Play Games на ПК. Более сложные интеграции, такие как вход через Play Games и API Play Integrity, не рассматриваются.
- Как выполнить сборку под архитектуру x86 из Unity.
- Как протестировать и развернуть приложение на эмуляторе Google Play Games.
- Как изменить пользовательский интерфейс, чтобы он отлично выглядел на ПК.
- Как определить, используете ли вы эмулятор Google Play Games, и соответствующим образом адаптировать игру.
Что вам понадобится
- Установлена Unity 2020 LTS (данный код был создан с использованием версии 2020.3.30f1).
- Эмулятор Google Play Games .
2. Настройка
Откройте или создайте новый проект
- Создайте новый проект, используя микроигру «2D-платформер», или откройте свой собственный проект.

- В проекте выберите File -> Build Settings и убедитесь, что настроена сборка для Android.

3. Подготовьте эмулятор Google Play Games.
Для начала скачайте эмулятор .
После установки вы должны увидеть рабочий стол Android в окне:

Это полнофункциональная высокопроизводительная среда разработки Android, подходящая для создания игр. Она должна отображаться в Android Debug Bridge (adb) как устройство на localhost:
❯ adb devices List of devices attached localhost:6520 device
Для обнаружения эмулятора вам потребуется последняя версия adb . Версия, поставляемая с Android Studio, работает, но adb, поставляемый с Unity, может не работать. Совместимая версия поставляется вместе с эмулятором, и вы можете найти её по адресу C:\Program Files\Google\Play Games Developer Emulator\current\emulator . Для наилучшего опыта разработки вы можете установить Android Studio и использовать её для управления вашим Android SDK.
Если эмулятор отключается от adb, подключите его снова из командной строки следующим образом:
adb connect localhost:6520
4. Настройте Unity для сборки и развертывания непосредственно в эмуляторе (необязательно)
Версия adb, поставляемая с Unity, может быть несовместима с эмулятором. Чтобы убедиться в этом, выберите File -> Build Settings и проверьте диалоговое окно Run Device , чтобы убедиться, что она указана в списке.

В зависимости от вашего проекта, процесса сборки и уровня комфорта, вы можете либо настроить Unity для развертывания непосредственно в эмуляторе Google Play Games, либо собрать APK-файл и развернуть его вручную с помощью adb install . Ручное развертывание требует наименьшего количества изменений, но может замедлить цикл итераций.
Развертывание на эмуляторе осуществляется непосредственно в два этапа:
- Настройте Unity на использование другого SDK Unity, в идеале — того, который установлен Android Studio .
- Обновите версию Build Tools, чтобы обойти ошибку в Unity .
Поскольку версия Android SDK, поставляемая с Unity, скорее всего, не обнаружит эмулятор, вам следует использовать Android Studio для установки более новой версии SDK.
- Откройте Android Studio и выберите Edit -> Preferences -> External Tools.
- Снимите флажок
Android SDK Tools Installed with Unityи укажите путь к установке Android Studio (обычноAppData/Local/Android/sdk). Оставьте параметрAndroid NDKбез изменений.

После обновления списка подключенных устройств в окне сборки должно появиться Google HPE device (localhost:6520) :

В зависимости от состояния этой ошибки и вашей версии Unity, вам также может потребоваться изменить версию инструментов сборки. Для этого убедитесь, что вы генерируете файлы mainTemplate.gradle и launcherTemplate.gradle .
- Откройте окно «Настройки проекта» , перейдите в раздел «Настройки проигрывателя» и найдите раздел
Publishing Settings. - Прокрутите вниз до параметров сборки и установите флажки "Custom Main Gradle Template" и "Custom Launcher Gradle Template", что сгенерирует оба файла Gradle в папке
Assets\Plugins\Android\.

- Замените каждое вхождение строки
**BUILDTOOLS**на30.0.0. В обоих файлах этот фрагмент кода теперь должен выглядеть так:
android {
compileSdkVersion **APIVERSION**
buildToolsVersion '30.0.0'
5. Развернуть на Chromebook (необязательно)
Вы можете начать разработку игр для Google Play Games без доступа к эмулятору Google Play Games, используя устройство ChromeOS. Как и Google Play Games на ПК, Chromebook оснащены клавиатурой и мышью, имеют большие экраны и доступны в конфигурациях x86. Мы будем использовать плагин Android Logcat Unity с Chromebook.
- Откройте менеджер пакетов и найдите
Android LogcatвUnity Registry.

Вам также необходимо настроить ваш Chromebook для разработки под Android . Начните с включения Linux.
- Выберите «Настройки» -> «Разработчик» -> «Linux».

Затем включите отладку ADB.
- Выберите «Настройки» -> «Разработчики» -> «Среда разработки Linux» -> «Разработка приложений Android» -> «Включить отладку ADB» .

Вам также понадобится узнать IP-адрес вашего Chromebook. Самый простой способ сделать это —
- Нажмите на значок «Информация о сети» , чтобы узнать IP-адрес вашего Chromebook.


- Чтобы открыть окно Android Logcat, выберите Window -> Analysis -> Android Logcat .

- Откройте список устройств. Если в данный момент ничего не подключено, может отображаться сообщение
No Device.

- Нажмите «Другие параметры подключения» и введите IP-адрес вашего Chromebook.

- Нажмите «Подключиться» . Вы должны увидеть окно «Успешно» :

Теперь ваш Chromebook отображается в списке устройств запуска Unity (возможно, сначала потребуется обновить страницу):

Теперь вы можете запускать игры на своем Chromebook и начинать тестирование и разработку на оборудовании, аналогичном ПК.
6. Разверните тестовую сборку.
Для работы Google Play Games требуется развертывание версии игры для архитектуры x86, что является частью процесса достижения целевых показателей производительности на настольных ПК. Все LTS-версии Unity могут генерировать сборки Android, совместимые с x86 и x86-64 (с пометкой «Chrome OS»), а версии Unity 2018 и более ранние могут генерировать сборки для x86. Чтобы разблокировать эти архитектуры, сначала необходимо переключиться на бэкенд скриптов IL2CPP, что, вероятно, уже делается в продакшене для поддержки arm64.
- Чтобы открыть окно «Настройки сборки», выберите «Файл» -> «Параметры сборки» , а затем нажмите «Параметры проигрывателя» .

- Перейдите в раздел «Другие настройки» и переключитесь на
IL2CPPв качествеScripting Backend.

Также следует включить поддержку x86 или x86-64. Для выпуска игр на платформе Google Play Games достаточно поддержки x86, хотя мы рекомендуем x86-64.

Версия библиотеки Frame Pacing, входящая в состав Unity, также несовместима с Google Play Games и приводит к сбою игры при запуске.
- Чтобы отключить синхронизацию кадров, в окне настроек проигрывателя откройте раздел «Разрешение и отображение» и снимите флажок «Оптимизированная синхронизация кадров» .

Теперь вы готовы к строительству!
- Снова откройте окно «Настройки сборки» и нажмите «Собрать и запустить» . Ваша игра появится в окне эмулятора.

Если вам не удаётся развернуть игру, проверьте, отображается ли «Устройство Google HPE (localhost:6520)» в списке «Запущенные устройства». Если оно отсутствует, убедитесь, что HPE_Dev запущен и вы видите главный экран Android. Если оно по-прежнему не отображается в списке устройств, запустите adb connect localhost:6520 с тем же файлом adb.exe который вы используете. Если вы используете плагин Android Logcat Unity , выберите Инструменты -> Открыть терминал , чтобы открыть терминал в каталоге с тем же adb.exe который использует Unity.
Open Terminal" highlighted" style="width: 624.00px" src="img/9101ce3c95fb1aa2.png" srcset="img/9101ce3c95fb1aa2_36.png 36w, img/9101ce3c95fb1aa2_48.png 48w, img/9101ce3c95fb1aa2_72.png 72w, img/9101ce3c95fb1aa2_96.png 96w, img/9101ce3c95fb1aa2_480.png 480w, img/9101ce3c95fb1aa2_720.png 720w, img/9101ce3c95fb1aa2_856.png 856w, img/9101ce3c95fb1aa2_960.png 960w, img/9101ce3c95fb1aa2_1440.png 1440w, img/9101ce3c95fb1aa2_1920.png 1920w, img/9101ce3c95fb1aa2_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px">
7. Адаптируйте свою игру для ПК.
По возможности старайтесь вносить изменения в игру, основываясь на платформенно-независимых параметрах или наличии определенных функций. Например, игрок на Android может подключить мышь и клавиатуру или монитор, поэтому изменение схемы управления или элементов интерфейса в зависимости от конфигурации устройства позволит вам использовать возможности Google Play Games на ПК на всех поддерживаемых платформах.
Если имеет смысл изменять логику в зависимости от того, использует ли игрок Google Play Games или ChromeOS, этот скрипт поможет вам это определить, проверив наличие системной функции HPE_EXPERIENCE :
using UnityEngine;
public class GoogleDeviceUtilities
{
#if UNITY_ANDROID && !UNITY_EDITOR
private static AndroidJavaObject PackageManager
{
get
{
var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
return currentActivity.Call<AndroidJavaObject>("getPackageManager");
}
}
public static bool IsChromeOS => PackageManager.Call<bool>("hasSystemFeature", "org.chromium.arc");
public static bool IsGooglePlayGames =>
PackageManager.Call<bool>("hasSystemFeature", "com.google.android.play.feature.HPE_EXPERIENCE");
public static bool HasKeyboard
{
get
{
var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
var resources = currentActivity.Call<AndroidJavaObject>("getResources");
var configuration = resources.Call<AndroidJavaObject>("getConfiguration");
var keyboard = configuration.Get<int>("keyboard");
return keyboard == 2; // Configuration.KEYBOARD_QWERTY
}
}
#else
public static bool IsChromeOS => false;
public static bool IsGooglePlayGames => false;
public static bool HasKeyboard => true;
#endif
}
У ПК экран больше, чем у типичного Android-смартфона. По возможности мы рекомендуем , чтобы ваш интерфейс занимал не более 20% экрана. Поскольку многие мобильные игры используют параметр "Масштабирование в соответствии с размером экрана", изменение его на "Постоянный физический размер" или "Постоянный размер пикселей" может стать хорошим первым шагом к достижению этой цели.

Также, если вы обнаружите, что запускаете игру в эмуляторе Google Play Games, вы можете динамически устанавливать параметры качества с помощью команды QualitySettings.SetQualityLevel во время выполнения. Эмулятор Google Play Games использует ANGLE для отправки нативных команд DirectX или Vulkan из OpenGL, генерируемых Unity, поэтому вы, вероятно, сможете добиться более высокого качества графики, чем было доступно в ваших мобильных игровых сборках.
8. Обработка ввода
Игры, выпускаемые в Google Play, должны быть ориентированы на ввод с помощью мыши и клавиатуры. Вам нужно будет спланировать взаимодействие с игрой с помощью мыши и клавиатуры, поэтому уделите время сейчас, чтобы получить пакет Unity Input SDK . Если вы не видите ссылку для скачивания на этой странице, убедитесь, что вы вошли в систему с учетной записью из группы play-mp-libs.
В целях тестирования многие игры добавляют базовые элементы управления мышью и клавиатурой для разработки непосредственно в редакторе. По возможности, вы можете включить их при запуске на устройстве ChromeOS или в эмуляторе Google Play Games.
По умолчанию Google Play Games и ChromeOS преобразуют ввод с мыши в имитацию касания. Если вы используете Input.GetTouch и Input.touchCount , ваша игра продолжит работать как положено. Если вы используете мультисенсорный ввод, например, управление двумя большими пальцами или масштабирование с помощью жеста «щипок», вам необходимо назначить действие на нажатия клавиш. Также следует назначить внутриигровые действия на нажатия клавиш, например, нажатие клавиши i для открытия инвентаря, клавиши Escape для закрытия диалоговых окон и клавиши Enter для отправки внутриигровых сообщений.
В мини-игре в жанре 2D-платформера для перемещения используются стрелки, а для прыжка — пробел. Если вы используете свою собственную игру, убедитесь, что у вас установлены предпочитаемые вами сочетания клавиш для следующего шага.
9. Интеграция входного SDK
Теперь, когда вы настроили управление мышью и клавиатурой, вам нужно добавить поддержку Input SDK . Это поможет игрокам обнаруживать ваши команды ввода с ПК с помощью удобного всплывающего окна:
- После импорта SDK в ваш проект создайте файл с именем
InputMappingProviderBehaviour.csи добавьте в него следующее содержимое:
using System.Collections.Generic;
using Google.Play.InputMapping;
using UnityEngine;
using Input = Google.Play.InputMapping.Input;
public class InputMappingProviderBehaviour : MonoBehaviour
{
private void Start()
{
Input.GetInputMappingClient().RegisterInputMappingProvider(new MyInputMappingProvider());
}
private class MyInputMappingProvider : InputMappingProvider
{
public InputMap OnProvideInputMap()
{
return new InputMap
{
InputGroups = new List<InputGroup> { },
MouseSettings = new MouseSettings
{
InvertMouseMovement = false,
AllowMouseSensitivityAdjustment = false
}
};
}
}
private enum ActionIds
{
}
}
- Теперь заполните
ActionIdsсписком действий, которые вы используете в своей игре. Для микроигры в жанре 2D-платформера действиями являются «Влево», «Вправо» и «Прыжок»:
private enum ActionIds
{
Left,
Right,
Jump
}
- В
OnProvideInputMapсоздайтеInputActionдля каждого действия. Для этого вам потребуется имя действия, поле ввода, а затем кнопки мыши или коды клавиш, которые будут к нему привязаны. Для примера игры:
var leftAction = new InputAction
{
ActionLabel = "Walk Left",
UniqueId = (int)ActionIds.Left,
InputControls = new InputControls
{
AndroidKeycodes = new[]
{
AndroidKeyCode.KEYCODE_DPAD_LEFT
}
}
};
var rightAction = new InputAction
{
ActionLabel = "Walk Right",
UniqueId = (int)ActionIds.Right,
InputControls = new InputControls
{
AndroidKeycodes = new[]
{
AndroidKeyCode.KEYCODE_DPAD_RIGHT
}
}
};
var jumpAction = new InputAction
{
ActionLabel = "Jump",
UniqueId = (int)ActionIds.Jump,
InputControls = new InputControls
{
AndroidKeycodes = new[]
{
AndroidKeyCode.KEYCODE_SPACE
}
}
};
- Далее, сгруппируйте эти действия ввода.
Для мини-игры у нас есть только одна группа, но вы можете создать столько, сколько необходимо, чтобы помочь игрокам найти нужные им действия. Добавьте это в OnProvideInputMap :
var movementInputGroup = new InputGroup
{
GroupLabel = "Movement",
InputActions = new List<InputAction>
{
leftAction, rightAction, jumpAction
}
};
- Добавьте все созданные вами группы ввода в карту ввода. Измените оператор return в
OnProvideInputMapследующим образом:
return new InputMap
{
InputGroups = new List<InputGroup> { movementInputGroup },
MouseSettings = new MouseSettings
{
InvertMouseMovement = false,
AllowMouseSensitivityAdjustment = false
}
};
- Наконец, добавьте созданный вами скрипт в свою игру:

- При повторном запуске игры нажмите
Shift+Tab, чтобы открыть внутриигровое оверлейное окно.

- Нажмите «Элементы управления» , чтобы просмотреть настроенные вами элементы управления.

10. Удалите встроенные веб-представления.
Чтобы обеспечить игрокам отличный опыт, следует отказаться от встроенных веб-представлений. Встроенные веб-представления часто используются для отображения таких элементов, как Политика конфиденциальности или Условия использования. Хотя они работают в Google Play Games, они отображаются во встроенном «мобильном» браузере, а не в предпочитаемом игроком браузере для настольных компьютеров, и могут вызвать путаницу у игроков на ПК. Поэтому в Unity, если вы используете какие-либо расширения для отображения встроенного браузера, используйте Application.OpenURL(url) .
11. Разрешения и функции
В Google Play Games отсутствует ряд функций и разрешений Android . Общее правило: на вашей ПК-версии никогда не должно появляться диалоговое окно запроса разрешений . Теперь, когда ваша сборка готова, рекомендуется выполнить стандартную установку и записать все появившиеся диалоговые окна, чтобы добавить их в список задач для отправки вашей игры.
Некоторые игры на Unity запрашивают разрешения с помощью API Android.Permission . Вам следует обернуть эти запросы в проверки типа if (GoogleDeviceUtilities.IsGooglePlayGames) и перейти непосредственно к логике обработки ошибок, если это необходимо.
12. Оптимизация рабочего стола
Google Play Games имеет несколько отличий от обычного Android-смартфона, и вам, возможно, потребуется соответствующим образом настроить игру.
Для сжатия текстур используйте формат DXT. Распространенные форматы текстур Android, такие как ETC, декодируются в памяти во время выполнения, если их нельзя передать непосредственно на графический процессор игрока. ASTC обеспечивает наилучшую совместимость с настольными компьютерами, хотя для проверки ожидаемого поведения вашей игры вам потребуется использовать инструмент профилирования графического процессора настольного компьютера.

Поскольку вы теперь используете настольную видеокарту, возможно, вам также захочется повысить качество графики. Вы можете настроить его непосредственно в параметрах проекта в разделе «Качество».

13. Поздравляем!
У вас есть все необходимое, чтобы начать работу над игрой для Google Play Games. Вы можете начать тестирование и доработку игры. Помните, что, даже если вы сохраните ту же кодовую базу, вам нужно будет адаптировать игру так, чтобы она ощущалась как нативная игра для ПК.
Что дальше?
Для выпуска игры в Google Play Games предстоит еще много работы:
- Для получения самой актуальной информации ознакомьтесь с руководством по быстрому запуску .
- Обновите систему до Play Games Services Sign In v2 , чтобы игрок автоматически входил в систему при запуске и это поможет обеспечить непрерывность работы игры .
- Внедрите API Play Integrity , чтобы обеспечить такую же безопасность при работе на ПК, как и на мобильном устройстве.
Наконец, большая часть проделанной вами работы по поддержке Google Play Games также помогает вам выпускать игры для ChromeOS, и вам следует рассмотреть возможность поддержки этой платформы наряду с ПК.