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

1. Введение

Логотип Google Play Игр

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

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

  1. Создайте новый проект с помощью 2D Platformer Microgame или откройте свой собственный проект.

Единство

  1. В проекте выберите «Файл» -> «Настройки сборки» и убедитесь, что вы настроены на сборку для Android.

Скриншот Юнити

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

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

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

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

Выполните развертывание в эмуляторе напрямую, выполнив следующие два шага:

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

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

  1. Откройте Android Studio и выберите «Правка» -> «Настройки» -> «Внешние инструменты».
  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. SПрокрутите вниз до параметров сборки и отметьте «Пользовательский основной шаблон Gradle» и «Пользовательский шаблон Gradle средства запуска», которые будут генерировать оба файла 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» , чтобы открыть окно Android Logcat.

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

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

Показано окно Android Logcat, выбран раскрывающийся список устройств.

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

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

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

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

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

Единство

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

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

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

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

Скриншот

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

Скриншот

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

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

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

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

Скриншот

Теперь вы готовы к сборке!

  1. Снова откройте окно «Параметры сборки» и нажмите «Build And Run» . Ваша игра появится в окне эмулятора.

Скриншот эмулятора Google Play Games с

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

  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. Добавьте все созданные вами входные группы на входную карту. Измените оператор возврата в 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. Разрешения и функции

Существует ряд функций и разрешений 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:

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