1. Введение
Последнее обновление: 18 октября 2022 г.
Как вы готовите свою игру для Google Play Games на ПК?
Google Play Games позволяет легко перенести вашу мобильную игру на ПК с ОС Windows. Это означает, что вы можете повысить вовлеченность игроков и аудиторию без необходимости перепроектировать свою игру или перепроектировать свою бизнес-модель. Вам еще предстоит внести несколько изменений, чтобы обеспечить вашим новым игрокам на ПК наилучшие впечатления.
Что вы узнаете
Эта лаборатория кода охватывает базовые части контрольного списка требований , которые помогут вам начать работу над игрой, а также поможет вам подготовить собственную игру Unity для Google Play Games на ПК. Более глубокие интеграции, такие как вход в Play игры и Play Integrity API, не рассматриваются.
- Как собрать Unity для архитектуры x86.
- Как протестировать и развернуть эмулятор Google Play Games.
- Как изменить пользовательский интерфейс, чтобы он отлично выглядел на ПК.
- Как определить, используете ли вы эмулятор Google Play Games, и соответствующим образом адаптировать свою игру.
Что вам понадобится
- Установка Unity 2020 LTS (эта лаборатория кода была создана с использованием версии 2020.3.30f1).
- Эмулятор Google Play Games .
2. Настройте
Откройте или создайте новый проект
- Создайте новый проект с помощью 2D Platformer Microgame или откройте свой собственный проект.
- В проекте выберите «Файл» -> «Настройки сборки» и убедитесь, что вы настроены на сборку для Android.
3. Подготовьте эмулятор Google Play Games.
Для начала скачайте эмулятор .
После его установки вы должны увидеть в окне рабочий стол Android:
Это полнофункциональная высокопроизводительная среда Android, подходящая для разработки игр. Он должен отображаться в Android Debug Bridge (adb) как устройство на локальном хосте:
❯ 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, может быть несовместима с эмулятором. Чтобы убедиться, выберите «Файл» -> «Настройки сборки» и проверьте диалоговое окно «Запустить устройство» , чтобы увидеть, есть ли оно в списке.
В зависимости от вашего проекта, процесса сборки и уровня комфорта вы можете либо настроить Unity для прямого развертывания в эмуляторе Google Play Games, либо создать APK и развернуть его вручную с помощью adb install
. Для его развертывания вручную требуется наименьшее количество изменений, но это может замедлить цикл итерации.
Выполните развертывание в эмуляторе напрямую, выполнив следующие два шага:
- Настройте Unity для использования другого Unity SDK, в идеале — того, который установлен Android Studio .
- Обновите версию Build Tools, чтобы обойти ошибку в Unity .
Поскольку версия Android SDK, поставляемая с Unity, вероятно, не обнаружит эмулятор, вы используете Android Studio для установки более новой версии SDK.
- Откройте Android Studio и выберите «Правка» -> «Настройки» -> «Внешние инструменты».
- Снимите флажок
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
. - SПрокрутите вниз до параметров сборки и отметьте «Пользовательский основной шаблон Gradle» и «Пользовательский шаблон Gradle средства запуска», которые будут генерировать оба файла 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» , чтобы открыть окно Android Logcat.
- Откройте список устройств. Если в данный момент ничего не подключено, может быть указано
No Device
.
- Нажмите «Другие варианты подключения» и введите IP-адрес вашего Chromebook.
- Нажмите Подключиться . Вы должны увидеть окно «Успех» :
Ваш Chromebook теперь появится в списке запускаемых устройств Unity (возможно, сначала вам придется обновить экран):
Теперь вы можете развертывать игры на своем Chromebook и начинать тестирование и разработку на оборудовании, подобном ПК.
6. Разверните тестовую сборку
Google Play Games требует, чтобы вы развернули версию вашей игры x86, что является частью того, как она достигает своих показателей производительности на настольных ПК. Все варианты Unity LTS могут создавать сборки Android, совместимые с x86 и x86-64 (с пометкой «Chrome OS»), а Unity версии 2018 и более ранних версий может создавать сборки x86. Чтобы разблокировать эти архитектуры, вам сначала нужно переключиться на серверную часть сценариев IL2CPP, что вы, вероятно, уже делаете в рабочей среде для поддержки Arm64.
- Выберите «Файл» -> «Настройки сборки» , чтобы открыть окно «Настройки сборки», а затем нажмите «Настройки проигрывателя» .
- Перейдите в раздел «Другие настройки» и переключите
Scripting Backend
наIL2CPP
.
Вам также следует включить поддержку x86 или x86-64. Для выпуска игры на платформе Google Play Games вам необходима только поддержка x86, хотя мы рекомендуем x86-64.
Версия пакетов Unity библиотеки Frame Pacing также несовместима с Google Play Games и приводит к сбою игры при запуске.
- Чтобы отключить синхронизацию кадров в окне настроек проигрывателя, откройте раздел «Разрешение и представление» и снимите флажок «Оптимизированная синхронизация кадров» .
Теперь вы готовы к сборке!
- Снова откройте окно «Параметры сборки» и нажмите «Build And Run» . Ваша игра появится в окне эмулятора.
Если вам не удается развернуть игру, проверьте, отображается ли «Устройство Google HPE (localhost:6520)» в списке «Устройство для запуска». Если он отсутствует, убедитесь, что HPE_Dev запущен и вы видите главный экран Android. Если оно по-прежнему не отображается в списке ваших устройств, запустите adb connect localhost:6520
с тем файлом adb.exe
который вы используете. Если вы используете плагин Android Logcat Unity , выберите «Инструменты» -> «Открыть терминал», чтобы открыть терминал в каталоге с тем же adb.exe
который использует Unity.
Открыть терминал" выделенный" style="width: 624.00px" src="img/9101ce3c95fb1aa2.png" srcset="img/9101ce3c95fb1aa2_36.png 36w, img/9101ce3c95fb1aa2_48.png 48w, img/9101ce3c95fb 1aa2_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.p ng 960w, img/9101ce3c95fb1aa2_1440.png 1440w, img/9101ce3c95fb1aa2_1920.png 1920w, img/9101ce3c95fb1aa2_2880.png 2880w" size="(макс.ширина: 840 пикселей) 100vw, 856px">
7. Адаптируйте свою игру для ПК.
По возможности старайтесь вносить какие-либо изменения в свою игру на основе показателей, не зависящих от платформы, или наличия определенных функций. Например, игрок на Android может подключить мышь и клавиатуру или подключить монитор, поэтому изменение схемы управления или элементов HUD в зависимости от конфигурации вашего устройства позволяет использовать 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. По возможности мы рекомендуем , чтобы ваш HUD занимал не более 20% экрана. Поскольку во многих мобильных играх используется «Масштабирование в зависимости от размера экрана», изменение этого параметра на «Постоянный физический размер» или «Постоянный размер пикселя» может стать хорошим первым шагом на пути к достижению этой цели.
Вы также можете захотеть динамически установить настройки качества с помощью команды QualitySettings.SetQualityLevel
во время выполнения, если вы обнаружите, что используете Google Play Games. Эмулятор Google Play Games использует ANGLE для выполнения собственных команд DirectX или Vulkan из излучаемых OpenGL Unity, поэтому вы, скорее всего, сможете добиться более высокой точности графики, чем было доступно в сборках ваших мобильных игр.
8. Обработка ввода
Игры, поставляемые в Google Play. Игры должны быть построены на использовании мыши и клавиатуры. Вам нужно будет спланировать, как взаимодействовать с вашей игрой с помощью мыши и клавиатуры, поэтому найдите время и приобретите Unitypackage Input SDK . Если вы не видите загрузку на этой странице, убедитесь, что вы вошли в систему под учетной записью в группе play-mp-libs.
В целях тестирования во многих играх создаются базовые элементы управления мышью и клавиатурой для разработки в редакторе. Если это возможно, вы можете включить их при работе на устройстве ChromeOS или в эмуляторе Google Play Games.
По умолчанию Google Play Games и ChromeOS преобразуют ввод данных мышью в имитацию касания. Если вы используете Input.GetTouch
и Input.touchCount
, ваша игра продолжает работать должным образом. Если вы полагаетесь на мультисенсорный ввод, например управление двумя большими пальцами или масштабирование с помощью пальцев, вам необходимо сопоставить действие с нажатиями клавиш. Вам также следует сопоставить внутриигровые действия с нажатиями клавиш, например, нажать i , чтобы открыть инвентарь, выйти , чтобы закрыть диалоговые окна, и ввести , чтобы отправить внутриигровые сообщения.
В 2D-платформере Microgame для перемещения используются стрелки, а для прыжков — пространство. Если вы используете собственную игру, убедитесь, что у вас есть предпочтительные сочетания клавиш для следующего шага.
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 } };
- Добавьте все созданные вами входные группы на входную карту. Измените оператор возврата в
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. Разрешения и функции
Существует ряд функций и разрешений Android , которые не поддерживаются в Google Play Games. Общее практическое правило заключается в том, что при сборке вашего ПК никогда не должно появляться диалоговое окно разрешений . Теперь, когда у вас готова сборка, неплохо будет выполнить типичную новую установку и записать все диалоговые окна, которые вы видите, чтобы добавить их в свой список «задач» для отправки игры.
Некоторые игры 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, чтобы автоматически входить в систему при запуске и соответствовать требованиям непрерывности работы.
- Внедрите Play Integrity API, чтобы обеспечить такую же безопасность на вашем компьютере, как и на мобильном устройстве.
Наконец, большая часть работы, которую вы проделали к этому моменту для поддержки Google Play Games, также помогает вам выпускать игры на ChromeOS, и вам следует рассмотреть возможность поддержки этой платформы вместе с ПК.