Memulai Unity dan Google Play Game untuk PC

1. Pengantar

Logo Google Play Game

Terakhir Diperbarui: 25-04-2022

Bagaimana Anda menyiapkan game untuk Google Play Games on PC?

Google Play Game memudahkan Anda menghadirkan game seluler di PC Windows. Artinya Anda dapat mengembangkan interaksi pemain dan audiens Anda tanpa harus mendesain ulang game atau mendesain ulang model bisnis Anda. Masih ada beberapa perubahan yang harus Anda lakukan untuk memberikan pengalaman terbaik kepada pemain PC baru.

Yang akan Anda pelajari

Codelab ini mencakup bagian dasar checklist persyaratan untuk memulai game, dan membantu Anda menyiapkan game Unity sendiri untuk Google Play Game di PC. Integrasi yang lebih mendalam, seperti Login Play Game, dan Play Integrity API, tidak akan dibahas.

  • Cara membuat build untuk arsitektur x86 dari Unity.
  • Cara menguji dan men-deploy ke emulator Google Play Game.
  • Cara memodifikasi antarmuka pengguna Anda agar terlihat bagus di PC.
  • Cara mendeteksi apakah Anda berjalan di emulator Google Play Game, lalu menyesuaikan game.

Yang Anda butuhkan

2. Memulai persiapan

Membuka atau membuat project baru

  1. Buat project baru menggunakan Microgame Platformer 2D,atau buka project Anda sendiri.

Layar "project baru" Unity "2D Platformer Microgame" dipilih sebagai template yang akan dibuat.

  1. Dari project, pilih File -> Build Settings dan pastikan Anda sudah siap untuk membuat build untuk Android.

Screenshot jendela "Build Settings" Unity Platform "Android" aktif.

3 Menyiapkan emulator Google Play Game

Mulai dengan mendownload emulator dari halaman ini. Jika Anda tidak melihat link download, pastikan Anda login dengan akun yang telah ditambahkan ke grup play-mp-emu. Anggota grup ini akan diberi tahu jika update untuk emulator tersedia, jadi pastikan Anda dapat menerima email dari play-mp-emu@googlegroups.com.

Setelah menginstalnya, Anda akan melihat desktop Android di jendela:

Screenshot jendela emulator Google Play Game Layar utama Android terlihat.

Ini adalah lingkungan Android berperforma tinggi yang dilengkapi banyak fitur dan cocok untuk pengembangan game. Akan muncul di Android Debug Bridge (adb) sebagai perangkat di localhost:

❯ adb devices
List of devices attached
localhost:6520  device

Anda memerlukan adb versi terbaru untuk mendeteksi emulator. Versi yang dipaketkan dengan Android Studio berfungsi, tetapi adb seperti yang dikirim dengan Unity mungkin tidak. Versi yang kompatibel dipaketkan dengan emulator, dan Anda dapat menemukannya di C:\Program Files\Google\HPE_Dev\emulator. Untuk mendapatkan pengalaman developer terbaik, Anda dapat menginstal Android Studio dan menggunakannya untuk mengelola Android SDK.

Jika emulator terputus dari adb, hubungkan kembali dari command line seperti ini:

adb connect localhost:6520

4. Mengonfigurasi Unity untuk mem-build dan men-deploy ke emulator secara langsung (Opsional)

Versi adb yang dikirim dengan Unity mungkin tidak kompatibel dengan emulator. Untuk memastikan, pilih File -> Build Settings, lalu periksa dialog Run Device untuk melihat apakah perangkat tercantum.

Jalankan Perangkat di jendela "Build Settings" "Run Device" dipilih, satu-satunya elemen yang terlihat adalah "Default device" dan "Semua perangkat yang kompatibel".

Bergantung pada project, proses build, dan tingkat kenyamanan Anda, Anda dapat memilih untuk mengonfigurasi Unity untuk di-deploy ke emulator Google Play Game secara langsung, atau mem-build APK dan men-deploynya secara manual dengan adb install. Untuk menerapkannya secara manual, diperlukan perubahan paling sedikit, tetapi dapat memperlambat siklus iterasi.

Deploy ke emulator secara langsung dengan dua langkah berikut:

  1. Konfigurasikan Unity untuk menggunakan SDK Unity lainnya, idealnya yang diinstal oleh Android Studio.
  2. Update versi Build Tools untuk menangani bug di Unity.

Karena versi Android SDK yang dikirim dengan Unity mungkin tidak akan mendeteksi emulator, Anda menggunakan Android Studio untuk menginstal SDK yang lebih baru.

  1. Buka Android Studio dan pilih Edit -> Preferences -> External Tools.
  2. Hapus centang Android SDK Tools Installed with Unity, dan berikan jalur ke penginstalan Android Studio Anda (biasanya AppData/Local/Android/sdk). Jangan ubah opsi Android NDK.

Screenshot "External Tools" dari jendela "Preferences"

saat memuat ulang perangkat yang terhubung, Anda akan melihat Google HPE device (localhost:6520) muncul di jendela build:

Screenshot jendela "Build Settings" "Run Device" "Google HPE" terlihat.

Tergantung pada status bug ini dan versi Unity Anda, Anda mungkin juga perlu mengubah versi alat build. Untuk melakukannya, pastikan Anda membuat mainTemplate.gradle dan launcherTemplate.gradle.

  1. Buka jendela Project Settings hingga Player Settings, lalu temukan bagian Publishing Settings.
  2. Scroll ke bawah ke opsi Build, lalu centang "Custom Main Gradle Template" dan "Custom peluncur Gradle Template", yang akan menghasilkan kedua file Gradle di Assets\Plugins\Android\.

Screenshot bagian "Player" di jendela "Project Settings".  Kotak centang untuk "Template Gradle Utama Kustom" dan "Template Gradle Peluncur Kustom" dicentang.

  1. Ganti semua instance string **BUILDTOOLS** dengan 30.0.0. Pada kedua file tersebut, bagian kode kini seharusnya terbaca:
android {
    compileSdkVersion **APIVERSION**
    buildToolsVersion '30.0.0'

5. Men-deploy ke Chromebook (opsional)

Anda dapat mulai mengembangkan game untuk Google Play Game tanpa akses ke emulator Google Play Game menggunakan perangkat ChromeOS. Mirip dengan Google Play Game di PC, Chromebook memiliki keyboard dan mouse, memiliki layar besar, dan tersedia dalam konfigurasi x86. Kami akan menggunakan plugin Unity Android Logcat dengan Chromebook.

  1. Buka Pengelola Paket dan telusuri Android Logcat di bagian Unity Registry.

Jendela Package Manager dengan "Android Logcat" dipilih untuk diinstal.

Anda juga perlu mengonfigurasi Chromebook untuk pengembangan Android. Mulai dengan mengaktifkan Linux.

  1. Pilih Settings -> Developer -> Linux.

Gambar animasi yang menunjukkan cara mengaktifkan dukungan Linux.  Developer dipilih di jendela Setelan. Kemudian, "Aktifkan" diklik dari "Lingkungan pengembangan Linux"

Kemudian, aktifkan proses debug ADB.

  1. Pilih Setelan -> Developer -> Lingkungan pengembangan Linux -> Kembangkan aplikasi Android -> Aktifkan proses debug ADB.

Proses debug ADB diaktifkan dari menu Developer.

Sebaiknya Anda juga mendapatkan alamat IP Chromebook. Cara termudah untuk melakukannya adalah dengan

  1. Klik ikon Info Jaringan untuk mendapatkan alamat IP Chromebook Anda.

Screenshot jendela jaringan terbuka di Chromebook.

Tombol info jaringan diklik dan menampilkan alamat IP.

  1. Pilih Window -> Analysis -> Android Logcat untuk membuka jendela Android Logcat.

Analisis terbuka di Unity dengan memilih "Android Logcat"." class="l10n-absolute-url-src" l10n-attrs-original-order="alt,style,src,class" l10n-encrypted-style="7ek2XYbAbHCf3eKVqUfzlU8zz2uYoEmRhrQeP6/mnhY=" src="https://codelabs.developers.google.com/android-google-play-games-unity-quickstart/img/a1a76bed69791616.png" style="width: 446.00px" />

  1. Buka daftar perangkat. perangkat mungkin bertuliskan No Device jika tidak ada yang terhubung saat ini.

Jendela Logcat Android ditampilkan, dropdown perangkat dipilih.

  1. Klik Opsi koneksi lainnya, lalu masukkan alamat IP Chromebook Anda.

Jendela Koneksi lainnya terbuka. Alamat IP dimasukkan.

  1. Klik Hubungkan. Anda akan melihat jendela Success:

Kotak dialog yang bertuliskan "Success" akan terbuka.

Chromebook kini muncul dalam daftar Perangkat Run Unity (Anda mungkin harus memuat ulang layar terlebih dahulu):

Jendela "Build Settings" Unity terbuka. Perangkat ChromeOS ditampilkan pada dropdown "Jalankan Perangkat".

Kini Anda dapat men-deploy game ke Chromebook dan mulai menguji serta mengembangkan hardware seperti PC.

6. Men-deploy build pengujian

Google Play Game mengharuskan Anda menerapkan game versi x86, yang merupakan bagian dari cara game mencapai tolok ukur performanya di PC desktop. Semua varian LTS Unity dapat menghasilkan build Android yang kompatibel dengan x86 dan x86-64 (berlabel "Chrome OS"), dan Unity versi 2018 dan sebelumnya dapat menghasilkan build x86. Untuk membuka kunci arsitektur ini, Anda harus beralih ke backend skrip IL2CPP terlebih dahulu, yang mungkin sudah Anda lakukan dalam produksi untuk dukungan arm64.

  1. Pilih File -> Build Settings untuk membuka jendela Build Settings, lalu klik Player Settings.

Screenshot jendela "Build Settings" yang difokuskan pada tombol "Player Settings".

  1. Buka bagian Setelan Lainnya dan alihkan Scripting Backend Anda ke IL2CPP.

Screenshot bagian "Setelan Lainnya" di "Setelan Pemain"

Anda juga harus mengaktifkan dukungan x86 atau x86-64. Untuk mengirim di platform Google Play Game, Anda hanya perlu mendukung x86, meskipun kami merekomendasikan x86-64.

Screenshot bagian Configuration Settings di Player  "Scripting Backend" disetel ke "IL2CPP" Target Architectures telah memilih "x86 (Chrome OS)" dan "x86-64 (Chrome OS)" ditandai.

Versi paket Unity library Frame Pacing juga tidak kompatibel dengan Google Play Game, dan menyebabkan game Anda error saat diluncurkan.

  1. Untuk menonaktifkan Frame Pacing dari jendela Player Settings, buka bagian Resolution and Presentation, lalu hapus centang Optimized Frame Pacing.

Screenshot "Resolution and Presentation" dengan "Optimized Frame Pacing" tidak dicentang

Sekarang Anda siap untuk membangun!

  1. Buka jendela Build Settings lagi, lalu klik Build And Run. Game Anda akan muncul di jendela emulator.

Screenshot emulator Google Play Game dengan "2D Platformer Microgame" yang berjalan

Jika Anda tidak dapat men-deploy game, periksa untuk melihat apakah "perangkat Google HPE (localhost:6520)" muncul di daftar "Run Device" Anda. Jika tidak ada, pastikan HPE_Dev berjalan dan Anda dapat melihat layar utama Android. Jika aplikasi masih tidak muncul di daftar perangkat, jalankan adb connect localhost:6520 dengan adb.exe yang sama persis dengan yang Anda gunakan. Jika Anda menggunakan plugin Unity Android Logcat, pilih Alat -> Buka Terminal untuk membuka terminal ke direktori dengan adb.exe yang sama dengan yang digunakan Unity.

Open Terminal" ditandai" class="l10n-absolute-url-src" l10n-attrs-original-order="alt,style,src,class" l10n-encrypted-style="Bfmtwp4MR0V5uTC1s3uklU8zz2uYoEmRhrQeP6/mnhY=" src="https://codelabs.developers.google.com/android-google-play-games-unity-quickstart/img/9101ce3c95fb1aa2.png" style="width: 624.00px" />

7. Menyesuaikan game Anda untuk PC

Jika memungkinkan, coba buat perubahan pada game Anda berdasarkan metrik yang tidak bergantung pada platform, atau keberadaan fitur tertentu. Misalnya, pemain di Android dapat menghubungkan mouse dan keyboard atau mencolokkan monitor, sehingga mengubah elemen kontrol atau HUD sebagai reaksi terhadap konfigurasi perangkat memungkinkan Anda memanfaatkan Google Play Games on PC di semua platform yang didukung.

Jika memungkinkan untuk mengubah logika berdasarkan apakah pemain berada di Google Play Game atau ChromeOS, skrip ini akan membantu Anda mendeteksinya dengan memeriksa fitur sistem 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
}

PC memiliki layar yang lebih besar daripada ponsel Android pada umumnya. Jika memungkinkan, sebaiknya HUD menggunakan maksimal 20% dari layar. Karena banyak game seluler menggunakan "Skala Dengan Ukuran Layar", mengubahnya menjadi "Ukuran Fisik Konstan" atau "Ukuran Piksel Konstan" dapat menjadi langkah pertama yang baik untuk mencapai sasaran ini.

Screenshot pemeriksa Canvas Scaler dengan "UI Scale Modes" yang tercantum pada mode Scale yang terlihat adalah "Constant Pixel Size", "Scale With Screen Size", dan "Constant Physical Size". "Constant Pixel Size" dipilih.

Anda mungkin juga ingin menetapkan setelan kualitas secara dinamis menggunakan perintah QualitySettings.SetQualityLevel pada saat runtime jika Anda mendeteksi bahwa aplikasi tersebut berjalan di Google Play Game. Emulator Google Play Game menggunakan ANGLE untuk mengeluarkan perintah DirectX atau Vulkan native dari build Unity OpenGL, sehingga kemungkinan Anda dapat mencapai fidelitas grafis yang lebih tinggi daripada yang tersedia pada build game seluler.

8 Penanganan input

Pengiriman game di Google Play Game harus dibuat dengan input mouse dan keyboard. Anda perlu merencanakan cara berinteraksi dengan game menggunakan mouse dan keyboard, jadi luangkan waktu sekarang untuk mendapatkan Input SDK unitypackage. Jika Anda tidak melihat hasil download di halaman tersebut, pastikan Anda login dengan akun di grup play-mp-libs.

Untuk tujuan pengujian, banyak game membangun kontrol mouse dan keyboard dasar untuk pengembangan di editor. Jika memungkinkan, Anda dapat mengaktifkannya saat dijalankan di perangkat ChromeOS atau di emulator Google Play Game.

Secara default, Google Play Game dan ChromeOS mengonversi input mouse menjadi simulasi sentuhan. Jika Anda menggunakan Input.GetTouch dan Input.touchCount, game akan terus berfungsi seperti yang diharapkan. Jika Anda mengandalkan input multisentuh, seperti kontrol ibu jari ganda atau cubit untuk memperbesar, Anda perlu memetakan tindakan ke penekanan tombol. Anda juga harus memetakan tindakan dalam game ke penekanan tombol, seperti menekan i untuk membuka inventaris, escape untuk menutup kotak dialog, dan enter untuk mengirim pesan dalam game.

Microgame Platformer MicroD menggunakan panah untuk bergerak dan ruang untuk melompat. Jika menggunakan game Anda sendiri, pastikan Anda memiliki binding tombol pilihan untuk langkah berikutnya.

9. Integrasi SDK input

Setelah menyiapkan kontrol mouse dan keyboard, Anda perlu menambahkan dukungan Input SDK . Ini membantu pemain menemukan input PC Anda dengan popover praktis:

  1. Setelah mengimpor SDK ke project Anda, buat file bernama InputMappingProviderBehaviour.cs dan tambahkan konten berikut:
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. Sekarang, isi ActionIds dengan daftar tindakan yang Anda gunakan di game. Untuk Microgame Platformer 2D, tindakannya adalah Kiri, Kanan, dan Lompat:
private enum ActionIds
{
    Left,
    Right,
    Jump
}
  1. Di OnProvideInputMap, buat InputAction untuk setiap tindakan. Untuk ini, Anda memerlukan nama tindakan, input, dan kemudian tombol mouse atau kode tombol yang akan terikat padanya. Untuk game contoh:
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. Selanjutnya, masukkan tindakan input ini ke dalam grup.

Untuk game mikro, kami hanya memiliki satu grup, tetapi Anda dapat membuat sebanyak yang Anda butuhkan untuk membantu pemain menemukan tindakan yang mereka butuhkan. Tambahkan ini ke OnProvideInputMap:

var movementInputGroup = new InputGroup
{
    GroupLabel = "Movement",
    InputActions = new List<InputAction>
    {
        leftAction, rightAction, jumpAction
    }
};
  1. Tambahkan semua grup input yang telah Anda buat ke peta input. Ubah pernyataan return di OnProvideInputMap untuk membaca:
return new InputMap
{
    InputGroups = new List<InputGroup> { movementInputGroup },
    MouseSettings = new MouseSettings
    {
        InvertMouseMovement = false,
        AllowMouseSensitivityAdjustment = false
    }
};
  1. Terakhir, tambahkan skrip yang dibuat ke game Anda:

Screenshot node bernama "InputSdk" dengan "Input Mapping Provider Behaviour" terlampir

  1. Saat Anda men-deploy game lagi, tekan Shift+Tab untuk membuka overlay dalam game.

Screenshot overlay "Opsi game" di emulator Google Play Game

  1. Klik Kontrol untuk melihat kontrol yang telah Anda konfigurasikan.

Screenshot overlay "Controls" di emulator Google Play Game

10. Menghapus iklan dan tampilan web yang disematkan

Meskipun kami tidak akan membahas semua logika yang perlu diupdate, ada dua item yang dapat segera Anda tangani untuk mencapai persetujuan aplikasi, dan memberikan pengalaman yang luar biasa kepada pemain.

Pertama, biasanya penggunaan tampilan web yang disematkan untuk menampilkan item seperti Kebijakan Privasi atau Persyaratan Layanan merupakan hal yang umum. Meskipun berfungsi di Google Play Game, game ini muncul di browser "seluler" tersemat, bukan browser desktop pilihan pemain, dan dapat menyebabkan kebingungan bagi pemain PC. Oleh karena itu, di Unity, jika Anda menggunakan ekstensi apa pun untuk menampilkan browser yang disematkan, kembali ke Application.OpenURL(url).

Kedua, iklan saat ini tidak diizinkan di Google Play Game, meskipun Anda dapat membiarkan SDK Iklan untuk pemutar seluler dan ChromeOS. Gunakan GoogleDeviceUtilities.IsGooglePlayGames untuk menentukan apakah Anda harus menyertakan iklan dalam game atau tidak. API terkait pembayaran lainnya, seperti Google Pay, akan berfungsi seperti yang diharapkan.

11. Izin dan fitur

Ada sejumlah fitur dan izin Android yang tidak didukung di Google Play Game. Prinsipnya adalah bahwa build PC Anda seharusnya tidak pernah memunculkan dialog izin. Hal yang baik untuk dilakukan, sekarang setelah build siap, adalah melalui penginstalan baru yang umum dan menuliskan dialog yang ingin Anda tambahkan ke daftar "daftar tugas" untuk mengirimkan game.

Beberapa game Unity meminta izin menggunakan Android.Permission API. Anda harus menggabungkannya dalam pemeriksaan if (GoogleDeviceUtilities.IsGooglePlayGames) dan langsung membuka logika kegagalan jika ada.

12. Pengoptimalan desktop

Google Play Game memiliki beberapa perbedaan jika dibandingkan dengan ponsel Android biasa, dan Anda mungkin ingin mengonfigurasi game sebagaimana mestinya.

Beralih ke DXT untuk kompresi tekstur. Format tekstur Android umum seperti ETC didekode dalam memori pada saat runtime jika format tersebut tidak dapat diteruskan ke GPU pemain secara langsung. ASTC memberi Anda kompatibilitas desktop terbaik, meskipun Anda perlu menggunakan alat pembuatan profil GPU desktop untuk memverifikasi perilaku yang diharapkan untuk game Anda.

Jendela "Build Settings" Unity terbuka dengan "Kompresi Tekstur" yang diperluas. "DXT (Tegra)" adalah penggantian kompresi tekstur yang ditandai.

Karena sekarang Anda menjalankan GPU desktop, sebaiknya tingkatkan kualitas grafisnya. Anda dapat menyesuaikannya secara langsung di Setelan Project di bagian Kualitas

Screenshot bagian "Kualitas" pada "Setelan Project"

13. Selamat

Anda sudah menyiapkan semuanya untuk mulai mengerjakan game Anda untuk Google Play Game. Anda dapat memulai pengujian dan iterasi pada game. Ingat bahwa meskipun Anda dapat mempertahankan code base yang sama, sebaiknya sesuaikan game agar terasa seperti game PC native.

Apa selanjutnya?

Ada lebih banyak pekerjaan yang harus dilakukan untuk mengirimkan game di Google Play Game:

Terakhir, sebagian besar pekerjaan yang telah Anda lakukan sampai tahap ini untuk mendukung Google Play Game juga membantu Anda menghadirkan ChromeOS,dan Anda harus mempertimbangkan untuk mendukung platform tersebut bersama dengan PC.