Начните работу с Unity и Google Play Games для ПК

1. Введение

логотип Google Play Games

Последнее обновление: 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. Настройка

Откройте или создайте новый проект

  1. Создайте новый проект, используя микроигру «2D-платформер», или откройте свой собственный проект.

Единство

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

Скриншот Unity

3. Подготовьте эмулятор Google Play Games.

Для начала скачайте эмулятор .

После установки вы должны увидеть рабочий стол Android в окне:

Скриншот окна эмулятора 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 . Ручное развертывание требует наименьшего количества изменений, но может замедлить цикл итераций.

Развертывание на эмуляторе осуществляется непосредственно в два этапа:

  1. Настройте Unity на использование другого SDK Unity, в идеале — того, который установлен Android Studio .
  2. Обновите версию Build Tools, чтобы обойти ошибку в Unity .

Поскольку версия Android SDK, поставляемая с Unity, скорее всего, не обнаружит эмулятор, вам следует использовать Android Studio для установки более новой версии SDK.

  1. Откройте Android Studio и выберите Edit -> Preferences -> External Tools.
  2. Снимите флажок Android SDK Tools Installed with Unity и укажите путь к установке Android Studio (обычно AppData/Local/Android/sdk ). Оставьте параметр Android NDK без изменений.

Скриншот

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

Скриншот

В зависимости от состояния этой ошибки и вашей версии Unity, вам также может потребоваться изменить версию инструментов сборки. Для этого убедитесь, что вы генерируете файлы mainTemplate.gradle и launcherTemplate.gradle .

  1. Откройте окно «Настройки проекта» , перейдите в раздел «Настройки проигрывателя» и найдите раздел Publishing Settings .
  2. Прокрутите вниз до параметров сборки и установите флажки "Custom Main Gradle Template" и "Custom Launcher Gradle Template", что сгенерирует оба файла Gradle в папке Assets\Plugins\Android\ .

Скриншот

  1. Замените каждое вхождение строки **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.

  1. Откройте менеджер пакетов и найдите Android Logcat в Unity Registry .

Окно диспетчера пакетов с

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

  1. Выберите «Настройки» -> «Разработчик» -> «Linux».

Анимированное изображение, демонстрирующее, как включить поддержку Linux. В окне настроек выбран разработчик. Затем...

Затем включите отладку ADB.

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

Отладка ADB включается в меню «Разработчик».

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

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

Скриншот окна сети, открытого на Chromebook.

При нажатии кнопки «Информация о сети» отображается IP-адрес.

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

Окно > Анализ, открытый в Unity с

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

Отобразилось окно Android Logcat, выбрано устройство из выпадающего списка.

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

Открывается окно «Другие подключения». Вводится IP-адрес.

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

Диалоговое окно с текстом

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

Единство

Теперь вы можете запускать игры на своем Chromebook и начинать тестирование и разработку на оборудовании, аналогичном ПК.

6. Разверните тестовую сборку.

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

  1. Чтобы открыть окно «Настройки сборки», выберите «Файл» -> «Параметры сборки» , а затем нажмите «Параметры проигрывателя» .

Скриншот

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

Скриншот

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

Скриншот раздела «Конфигурация» в настройках плеера.

Версия библиотеки Frame Pacing, входящая в состав Unity, также несовместима с Google Play Games и приводит к сбою игры при запуске.

  1. Чтобы отключить синхронизацию кадров, в окне настроек проигрывателя откройте раздел «Разрешение и отображение» и снимите флажок «Оптимизированная синхронизация кадров» .

Скриншот

Теперь вы готовы к строительству!

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

Скриншот эмулятора 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 . Это поможет игрокам обнаруживать ваши команды ввода с ПК с помощью удобного всплывающего окна:

  1. После импорта 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
    {
    }
}
  1. Теперь заполните ActionIds списком действий, которые вы используете в своей игре. Для микроигры в жанре 2D-платформера действиями являются «Влево», «Вправо» и «Прыжок»:
private enum ActionIds
{
    Left,
    Right,
    Jump
}
  1. В 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
        }
    }
};
  1. Далее, сгруппируйте эти действия ввода.

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

var movementInputGroup = new InputGroup
{
    GroupLabel = "Movement",
    InputActions = new List<InputAction>
    {
        leftAction, rightAction, jumpAction
    }
};
  1. Добавьте все созданные вами группы ввода в карту ввода. Измените оператор return в OnProvideInputMap следующим образом:
return new InputMap
{
    InputGroups = new List<InputGroup> { movementInputGroup },
    MouseSettings = new MouseSettings
    {
        InvertMouseMovement = false,
        AllowMouseSensitivityAdjustment = false
    }
};
  1. Наконец, добавьте созданный вами скрипт в свою игру:

Скриншот узла с именем

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

Скриншот

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

Скриншот

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 предстоит еще много работы:

Наконец, большая часть проделанной вами работы по поддержке Google Play Games также помогает вам выпускать игры для ChromeOS, и вам следует рассмотреть возможность поддержки этой платформы наряду с ПК.