Pierwsze kroki z Unity i Grami Google Play na PC

1. Wprowadzenie

Logo Gier Google Play

Ostatnia aktualizacja: 2022-10-18

Jak przygotować grę do Gier Google Play na PC?

Gry Google Play ułatwiają przenoszenie gier mobilnych na komputery z systemem Windows. Oznacza to, że możesz zwiększyć zaangażowanie graczy i rozwinąć swoją publiczność bez konieczności przebudowywania gry czy zmiany modelu biznesowego. Musisz jeszcze wprowadzić kilka zmian, aby zapewnić nowym graczom na PC jak najlepsze wrażenia.

Czego się nauczysz

Ten przewodnik obejmuje podstawowe części listy kontrolnej wymagań, które pomogą Ci rozpocząć pracę nad grą i przygotować ją do uruchomienia w Grami Google Play na PC. Bardziej zaawansowane integracje, takie jak logowanie w Grach Play czy interfejs Play Integrity API, nie są objęte tym artykułem.

  • Jak tworzyć aplikacje na architekturę x86 w Unity.
  • Jak testować i wdrażać w emulatorze Gier Google Play.
  • Jak zmodyfikować interfejs, aby dobrze wyglądał na komputerze.
  • Jak wykrywać, czy gra jest uruchomiona w emulatorze Gier Google Play, i odpowiednio ją dostosowywać.

Czego potrzebujesz

2. Konfiguracja

Otwieranie lub tworzenie nowego projektu

  1. Utwórz nowy projekt za pomocą mikrogry 2D Platformer lub otwórz własny projekt.

The Unity

  1. W projekcie wybierz File –> Build Settings (Plik –> Ustawienia kompilacji) i sprawdź, czy możesz tworzyć kompilacje na Androida.

Zrzut ekranu z Unity

3. Przygotowywanie emulatora Gier Google Play

Zacznij od pobrania emulatora.

Po zainstalowaniu powinien Ci się wyświetlić pulpit Androida w oknie:

Zrzut ekranu z okna emulatora Gier Google Play. Widoczny jest ekran główny Androida.

Jest to w pełni funkcjonalne środowisko Androida o wysokiej wydajności, odpowiednie do tworzenia gier. Powinien pojawić się w Android Debug Bridge (adb) jako urządzenie na hoście lokalnym:

❯ adb devices
List of devices attached
localhost:6520  device

Aby wykryć emulator, musisz mieć najnowszą wersję adb. Wersja dołączona do Androida Studio działa, ale adb dostarczany z Unity może nie działać. Zgodna wersja jest dołączona do emulatora i można ją znaleźć pod adresem C:\Program Files\Google\Play Games Developer Emulator\current\emulator. Aby zapewnić sobie jak najlepsze środowisko programistyczne, możesz zainstalować Android Studio i używać go do zarządzania pakietem Android SDK.

Jeśli emulator odłączy się od adb, połącz go ponownie z wiersza poleceń w ten sposób:

adb connect localhost:6520

4. Konfigurowanie Unity do bezpośredniego kompilowania i wdrażania w emulatorze (opcjonalnie)

Wersja adb dostarczana z Unity może nie być zgodna z emulatorem. Aby się upewnić, wybierz File (Plik) –> Build Settings (Ustawienia kompilacji) i sprawdź, czy w oknie Run Device (Uruchom urządzenie) znajduje się Twoje urządzenie.

Uruchom urządzenie w

W zależności od projektu, procesu kompilacji i poziomu zaawansowania możesz skonfigurować Unity tak, aby wdrażać aplikację bezpośrednio w emulatorze Gier Google Play, lub skompilować plik APK i wdrożyć go ręcznie za pomocą adb install. Wdrożenie ręczne wymaga najmniejszej liczby zmian, ale może spowolnić cykl iteracji.

Aby wdrożyć aplikację w emulatorze, wykonaj te 2 czynności:

  1. Skonfiguruj Unity tak, aby używać innego pakietu Unity SDK, najlepiej tego zainstalowanego przez Android Studio.
  2. Zaktualizuj wersję narzędzi do kompilacji, aby obejść błąd w Unity.

Wersja pakietu Android SDK dostarczana z Unity prawdopodobnie nie wykryje emulatora, dlatego do zainstalowania nowszego pakietu SDK użyj Android Studio.

  1. Otwórz Android Studio i kliknij Edytuj –> Preferencje –> Narzędzia zewnętrzne.
  2. Odznacz Android SDK Tools Installed with Unity i podaj ścieżkę do instalacji Android Studio (zwykle AppData/Local/Android/sdk). Nie zmieniaj opcji Android NDK.

Zrzut ekranu

Po odświeżeniu połączonych urządzeń w oknie kompilacji powinna się pojawić ikona Google HPE device (localhost:6520):

Zrzut ekranu

W zależności od stanu tego błędu i wersji Unity może być też konieczna zmiana wersji narzędzi do kompilacji. Aby to zrobić, sprawdź, czy generujesz mainTemplate.gradle i launcherTemplate.gradle.

  1. Otwórz okno Ustawienia projektu, a następnie Ustawienia odtwarzacza i znajdź sekcję Publishing Settings.
  2. Przewiń w dół do opcji Build (Kompilacja) i zaznacz „Custom Main Gradle Template” (Niestandardowy główny szablon Gradle) oraz „Custom Launcher Gradle Template” (Niestandardowy szablon Gradle programu uruchamiającego). Spowoduje to wygenerowanie obu plików Gradle w folderze Assets\Plugins\Android\.

Zrzut ekranu

  1. Zastąp każde wystąpienie ciągu **BUILDTOOLS** ciągiem 30.0.0. W obu plikach sekcja kodu powinna teraz wyglądać tak:
android {
    compileSdkVersion **APIVERSION**
    buildToolsVersion '30.0.0'

5. Wdrażanie na Chromebooku (opcjonalnie)

Możesz zacząć tworzyć gry na Gry Google Play bez dostępu do emulatora Gry Google Play, korzystając z urządzenia z ChromeOS. Podobnie jak w przypadku Gier Google Play na PC, Chromebooki mają klawiatury i myszy, duże ekrany i są dostępne w konfiguracjach x86. Użyjemy wtyczki Unity Android Logcat na Chromebooku.

  1. Otwórz Menedżera pakietów i wyszukaj Android Logcat w sekcji Unity Registry.

Okno Menedżera pakietów z

Musisz też skonfigurować Chromebooka pod kątem tworzenia aplikacji na Androida. Zacznij od włączenia Linuksa.

  1. Wybierz Ustawienia –> Deweloper –> Linux.

Animowany obraz pokazujący, jak włączyć obsługę systemu Linux.  W oknie Ustawienia wybrano opcję Programista. Wtedy

Następnie włącz debugowanie ADB.

  1. Wybierz Ustawienia –> Programiści –> Środowisko programistyczne Linuksa –> Tworzenie aplikacji na Androida –> Włącz debugowanie ADB.

Debugowanie ADB jest włączone w menu Deweloper.

Warto też sprawdzić adres IP Chromebooka. Najłatwiej to zrobić,

  1. Kliknij ikonę Informacje o sieci, aby uzyskać adres IP Chromebooka.

Zrzut ekranu przedstawiający otwarte okno sieci na Chromebooku.Kliknięto przycisk informacji o sieci, co spowodowało wyświetlenie adresu IP.

  1. Aby otworzyć okno Android Logcat, kliknij Window –> Analysis –> Android Logcat.

Okno> Analiza otwarta w Unity z 

  1. Otwórz listę urządzeń. Jeśli nic nie jest połączone, może być widoczny komunikat No Device.

Wyświetlone okno Logcat Androida z wybranym menu urządzenia.

  1. Kliknij Inne opcje połączenia i wpisz adres IP Chromebooka.

Otworzy się okno Inne połączenia. Wpisz adres IP.

  1. Kliknij Połącz. Powinno się wyświetlić okno Success (Powodzenie):

Pojawi się okno dialogowe z komunikatem

Chromebook pojawi się teraz na liście urządzeń w Unity (może być konieczne odświeżenie ekranu):

The Unity

Możesz teraz wdrażać gry na Chromebooku i rozpocząć testowanie oraz tworzenie na sprzęcie podobnym do komputera.

6. Wdrażanie kompilacji testowej

Gry Google Play wymagają wdrożenia wersji gry pod architekturę x86, co jest jednym z czynników wpływających na osiąganie przez nią wyników testów wydajności na komputerach stacjonarnych. Wszystkie warianty LTS Unity mogą generować kompilacje na Androida zgodne z architekturami x86 i x86-64 (oznaczone jako „ChromeOS”), a Unity w wersji 2018 i starszych może generować kompilacje pod architekturę x86. Aby odblokować te architektury, musisz najpierw przełączyć się na backend skryptów IL2CPP, co prawdopodobnie robisz już w środowisku produkcyjnym w celu obsługi architektury arm64.

  1. Wybierz File –> Build Settings (Plik –> Ustawienia kompilacji), aby otworzyć okno Ustawienia kompilacji, a następnie kliknij Player Settings (Ustawienia odtwarzacza).

Zrzut ekranu

  1. Otwórz sekcję Inne ustawienia i przełącz Scripting Backend na IL2CPP.

Zrzut ekranu

Warto też włączyć obsługę x86 lub x86-64. Aby opublikować grę na platformie Gry Google Play, musisz obsługiwać architekturę x86, ale zalecamy x86-64.

Zrzut ekranu sekcji Konfiguracja w Ustawieniach odtwarzacza

Wersja biblioteki Frame Pacing dołączonej do silnika Unity jest też niezgodna z Grami Google Play i powoduje awarię gry podczas uruchamiania.

  1. Aby wyłączyć synchronizację klatek, w oknie Ustawienia odtwarzacza otwórz sekcję Rozdzielczość i prezentacja i odznacz opcję Zoptymalizowana synchronizacja klatek.

Zrzut ekranu

Możesz teraz zacząć budować.

  1. Ponownie otwórz okno Ustawienia kompilacji i kliknij Skompiluj i uruchom. Twoja gra pojawi się w oknie emulatora.

Zrzut ekranu z emulatorem Gier Google Play z 

Jeśli nie możesz wdrożyć gry, sprawdź, czy na liście „Run Device” (Uruchom urządzenie) widnieje pozycja „Google HPE device (localhost:6520)”. Jeśli go nie ma, sprawdź, czy HPE_Dev jest uruchomiony i czy widzisz ekran główny Androida. Jeśli nadal nie widzisz go na liście urządzeń, uruchom adb connect localhost:6520 z dokładnym adb.exe, którego używasz. Jeśli używasz wtyczki Android Logcat Unity, wybierz Tools -> Open Terminal (Narzędzia –> Otwórz terminal), aby otworzyć terminal w katalogu, któregoadb.exe używa Unity.

Zrzut ekranu Otwórz 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. Dostosowywanie gry do PC

W miarę możliwości wprowadzaj zmiany w grze na podstawie niezależnych od platformy rodzajów danych lub obecności określonych funkcji. Gracz korzystający z Androida może na przykład podłączyć mysz i klawiaturę lub monitor. Zmiana schematu sterowania lub elementów HUD w reakcji na konfigurację urządzenia pozwala wykorzystać Gry Google Play na PC na wszystkich obsługiwanych platformach.

Jeśli chcesz zmienić logikę w zależności od tego, czy gracz korzysta z Gier Google Play czy z ChromeOS, ten skrypt pomoże Ci to wykryć, sprawdzając funkcję systemową 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
}

Komputery mają większy wyświetlacz niż typowy telefon z Androidem. Jeśli to możliwe, zalecamy, aby wyświetlacz HUD zajmował nie więcej niż 20% ekranu. Wiele gier mobilnych korzysta z opcji „Skaluj do rozmiaru ekranu”, więc zmiana jej na „Stały rozmiar fizyczny” lub „Stały rozmiar w pikselach” może być dobrym pierwszym krokiem do osiągnięcia tego celu.

Zrzut ekranu

Możesz też dynamicznie ustawiać jakość za pomocą polecenia QualitySettings.SetQualityLevel w czasie działania, jeśli wykryjesz, że gra jest uruchomiona w Grach Google Play. Emulator Gry Google Play używa ANGLE do wydawania natywnych poleceń DirectX lub Vulkan z poleceń OpenGL emitowanych przez Unity, dzięki czemu możesz uzyskać wyższą dokładność grafiki niż w przypadku kompilacji gier mobilnych.

8. Obsługa danych wejściowych

Gry udostępniane w Gry Google Play powinny być dostosowane do sterowania za pomocą myszy i klawiatury. Musisz zaplanować, jak będzie wyglądać interakcja z grą za pomocą myszy i klawiatury, więc poświęć trochę czasu na pobranie pakietu Input SDK w formacie unitypackage. Jeśli nie widzisz pobierania na tej stronie, sprawdź, czy używasz konta należącego do grupy play-mp-libs.

Na potrzeby testowania wiele gier ma podstawowe sterowanie myszą i klawiaturą, które jest tworzone w edytorze. Jeśli to możliwe, włącz te funkcje, gdy korzystasz z urządzenia z ChromeOS lub emulatora Gier Google Play.

Domyślnie Gry Google Play i ChromeOS przekształcają sygnał myszy w symulowane dotknięcia. Jeśli używasz Input.GetTouch i Input.touchCount, gra nadal działa zgodnie z oczekiwaniami. Jeśli korzystasz z wejścia wielodotykowego, np. sterowania dwoma kciukami lub powiększania przez uszczypnięcie, musisz przypisać działanie do naciśnięć klawiszy. Powinieneś też przypisać działania w grze do naciśnięć klawiszy, np. naciśnięcie klawisza i, aby otworzyć ekwipunek, klawisza Escape, aby zamknąć okna dialogowe, i klawisza Enter, aby wysłać wiadomości w grze.

W mikrogierce 2D Platformer do poruszania się używa się strzałek, a do skakania – spacji. Jeśli używasz własnej gry, upewnij się, że masz preferowane przypisania klawiszy, aby przejść do następnego kroku.

9. Integracja pakietu SDK do wprowadzania danych

Po skonfigurowaniu sterowania myszą i klawiaturą musisz dodać obsługę pakietu SDK do obsługi danych wejściowych . Pomaga to graczom odkrywać wejścia na PC dzięki przydatnemu wyskakującemu okienku:

  1. Po zaimportowaniu pakietu SDK do projektu utwórz plik o nazwie InputMappingProviderBehaviour.cs i dodaj do niego te treści:
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. Teraz wypełnij pole ActionIds listą działań, których używasz w grze. W przypadku mikrogry 2D Platformer są to działania Left (W lewo), Right (W prawo) i Jump (Skok):
private enum ActionIds
{
    Left,
    Right,
    Jump
}
  1. W sekcji OnProvideInputMap utwórz InputAction dla każdego działania. W tym celu musisz podać nazwę działania, dane wejściowe, a następnie przyciski myszy lub kody klawiszy, które będą z nim powiązane. W przypadku przykładowej gry:
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. Następnie podziel te działania wejściowe na grupy.

W przypadku mikrogry mamy tylko 1 grupę, ale możesz utworzyć ich tyle, ile potrzebujesz, aby ułatwić graczom znajdowanie potrzebnych działań. Dodaj to do OnProvideInputMap:

var movementInputGroup = new InputGroup
{
    GroupLabel = "Movement",
    InputActions = new List<InputAction>
    {
        leftAction, rightAction, jumpAction
    }
};
  1. Dodaj do mapy wejściowej wszystkie utworzone grupy wejściowe. Zmień instrukcję zwrotu w OnProvideInputMap na:
return new InputMap
{
    InputGroups = new List<InputGroup> { movementInputGroup },
    MouseSettings = new MouseSettings
    {
        InvertMouseMovement = false,
        AllowMouseSensitivityAdjustment = false
    }
};
  1. Na koniec dodaj utworzony skrypt do gry:

Zrzut ekranu węzła o nazwie

  1. Gdy ponownie wdrożysz grę, naciśnij Shift+Tab, aby otworzyć nakładkę w grze.

Zrzut ekranu

  1. Kliknij Elementy sterujące, aby zobaczyć skonfigurowane elementy sterujące.

Zrzut ekranu

10. Usuwanie osadzonych widoków internetowych

Aby zapewnić graczom jak najlepsze wrażenia, usuń umieszczone widoki internetowe. Osadzone widoki internetowe są często używane do wyświetlania takich elementów jak Polityka prywatności czy Warunki korzystania z usług. Chociaż działają one w Grach Google Play, wyświetlają się w osadzonej przeglądarce „mobilnej”, a nie w przeglądarce na komputerze, której używa gracz. Może to wprowadzać w błąd graczy na PC. Dlatego w Unity, jeśli używasz rozszerzeń do wyświetlania osadzonej przeglądarki, wróć do Application.OpenURL(url).

11. Uprawnienia i funkcje

W Grach Google Play nie są obsługiwane niektóre funkcje i uprawnienia Androida. Ogólna zasada jest taka, że aplikacja na PC nigdy nie powinna wyświetlać okna dialogowego z prośbą o uprawnienia. Teraz, gdy masz już gotową kompilację, warto przeprowadzić typową nową instalację i zanotować wszystkie wyświetlane okna, aby dodać je do listy „do zrobienia” przed przesłaniem gry.

Niektóre gry na platformie Unity proszą o uprawnienia za pomocą interfejsu Android.Permission API. W razie potrzeby umieść je w if (GoogleDeviceUtilities.IsGooglePlayGames) i przejdź bezpośrednio do logiki błędu.

12. Optymalizacje na komputery

Gry Google Play różnią się od typowego telefonu z Androidem, więc warto odpowiednio skonfigurować grę.

Przełącz na DXT, aby skompresować teksturę. Popularne formaty tekstur Androida, takie jak ETC, są dekodowane w pamięci w czasie działania, jeśli nie można ich bezpośrednio przekazać do procesora graficznego odtwarzacza. ASTC zapewnia najlepszą zgodność z komputerami, ale aby sprawdzić oczekiwane działanie gry, musisz użyć narzędzia do profilowania GPU na komputerze.

The Unity

Ponieważ korzystasz teraz z karty graficznej na komputerze stacjonarnym, możesz też zwiększyć jakość grafiki. Możesz to zmienić bezpośrednio w Ustawieniach projektu w sekcji Jakość.

Zrzut ekranu

13. Gratulacje

Masz już wszystko, czego potrzebujesz, aby rozpocząć pracę nad grą na potrzeby Gier Google Play. Możesz rozpocząć testowanie i ulepszanie gry. Pamiętaj, że chociaż możesz zachować tę samą bazę kodu, warto dostosować grę, aby sprawiała wrażenie natywnej gry na PC.

Co dalej?

Aby opublikować grę w Grach Google Play, musisz wykonać jeszcze kilka czynności:

Większość pracy wykonanej do tej pory w celu obsługi Gier Google Play pomoże Ci też w wydaniu gry na ChromeOS. Warto rozważyć obsługę tej platformy wraz z komputerami.