1. Introduzione

Ultimo aggiornamento: 18/10/2022
Come si prepara un gioco per Google Play Giochi su PC?
Google Play Giochi semplifica il porting del tuo gioco mobile su PC Windows. Ciò significa che puoi aumentare il coinvolgimento dei giocatori e il tuo pubblico senza dover riprogettare il gioco o il modello di business. Devi ancora apportare alcune modifiche per offrire ai nuovi giocatori su PC la migliore esperienza possibile.
Cosa imparerai a fare
Questo codelab copre le parti di base della lista di controllo dei requisiti per avviare il tuo gioco e ti aiuta a preparare il tuo gioco Unity per Google Play Giochi su PC. Le integrazioni più approfondite, come l'accesso a Play Giochi e l'API Play Integrity, non sono coperte.
- Come creare per l'architettura x86 da Unity.
- Come testare ed eseguire il deployment nell'emulatore Google Play Games.
- Come modificare l'interfaccia utente per visualizzarla al meglio su un PC.
- Come rilevare se stai eseguendo l'emulatore Google Play Giochi e adattare il gioco di conseguenza.
Che cosa ti serve
- Installazione di Unity 2020 LTS (questo codelab è stato creato con la versione 2020.3.30f1).
- L'emulatore di Google Play Giochi.
2. Configurazione
Aprire o creare un nuovo progetto
- Crea un nuovo progetto utilizzando il microgioco platform 2D o apri un tuo progetto.

- Nel progetto, seleziona File -> Build Settings e verifica di aver configurato la build per Android.

3. Preparare l'emulatore di Google Play Games
Inizia scaricando l'emulatore.
Dopo l'installazione, dovresti vedere un desktop Android in una finestra:

Si tratta di un ambiente Android ad alte prestazioni e ricco di funzionalità adatto allo sviluppo di giochi. Dovrebbe essere visualizzato in Android Debug Bridge (adb) come dispositivo su localhost:
❯ adb devices List of devices attached localhost:6520 device
Per rilevare l'emulatore, devi avere una versione recente di adb. La versione inclusa in Android Studio funziona, ma adb fornito con Unity potrebbe non funzionare. Una versione compatibile è inclusa nell'emulatore e puoi trovarla in C:\Program Files\Google\Play Games Developer Emulator\current\emulator. Per un'esperienza di sviluppo ottimale, ti consigliamo di installare Android Studio e utilizzarlo per gestire l'SDK Android.
Se l'emulatore si disconnette da adb, riconnettilo dalla riga di comando nel seguente modo:
adb connect localhost:6520
4. (Facoltativo) Configurare Unity per la creazione e il deployment direttamente nell'emulatore
La versione di adb fornita con Unity potrebbe non essere compatibile con l'emulatore. Per verificare, seleziona File -> Build Settings e controlla la finestra di dialogo Run Device per vedere se è presente nell'elenco.

A seconda del progetto, del processo di compilazione e del livello di comfort, puoi scegliere di configurare Unity per il deployment diretto nell'emulatore Google Play Giochi oppure creare un APK ed eseguirne il deployment manualmente con adb install. Il deployment manuale richiede il minor numero di modifiche, ma potrebbe rallentare il ciclo di iterazione.
Esegui il deployment nell'emulatore direttamente con questi due passaggi:
- Configura Unity in modo che utilizzi un altro SDK Unity, idealmente quello installato da Android Studio.
- Aggiorna la versione di Build Tools per risolvere un bug in Unity.
Poiché la versione dell'SDK Android fornita con Unity probabilmente non rileva l'emulatore, utilizza Android Studio per installare un SDK più recente.
- Apri Android Studio e seleziona Modifica -> Preferenze -> Strumenti esterni.
- Deseleziona
Android SDK Tools Installed with Unitye fornisci il percorso di installazione di Android Studio (di solitoAppData/Local/Android/sdk). Lascia l'opzioneAndroid NDKinvariata.

Quando aggiorni i dispositivi connessi, dovresti visualizzare Google HPE device (localhost:6520) nella finestra di compilazione:

A seconda dello stato di questo bug e della tua versione di Unity, potresti anche dover modificare la versione degli strumenti di compilazione. Per farlo, verifica di generare un mainTemplate.gradle e un launcherTemplate.gradle.
- Apri la finestra Impostazioni progetto per Impostazioni player e individua la sezione
Publishing Settings. - Scorri verso il basso fino alle opzioni Build (Compila) e seleziona "Custom Main Gradle Template" (Modello Gradle principale personalizzato) e "Custom Launcher Gradle Template" (Modello Gradle di avvio personalizzato), che genereranno entrambi i file Gradle in
Assets\Plugins\Android\.

- Sostituisci qualsiasi istanza della stringa
**BUILDTOOLS**con30.0.0. In entrambi i file, la sezione di codice ora dovrebbe essere:
android {
compileSdkVersion **APIVERSION**
buildToolsVersion '30.0.0'
5. Eseguire il deployment su un Chromebook (facoltativo)
Puoi iniziare a sviluppare giochi per Google Play Giochi senza accedere all'emulatore Google Play Giochi utilizzando un dispositivo ChromeOS. Proprio come Google Play Giochi su PC, i Chromebook hanno tastiere e mouse, schermi grandi e sono disponibili in configurazioni x86. Utilizzeremo il plug-in Unity Android Logcat con Chromebook.
- Apri Package Manager e cerca
Android LogcatinUnity Registry.

Devi anche configurare Chromebook per lo sviluppo per Android. Inizia attivando Linux.
- Seleziona Impostazioni -> Sviluppatore -> Linux.

Poi attiva il debug ADB.
- Seleziona Impostazioni -> Sviluppatori -> Ambiente di sviluppo Linux -> Sviluppa app per Android -> Attiva debug ADB.

Ti consigliamo anche di recuperare l'indirizzo IP di Chromebook. Il modo più semplice per farlo è
- Fai clic sull'icona Informazioni di rete per ottenere l'indirizzo IP di Chromebook.


- Seleziona Window -> Analysis -> Android Logcat per aprire la finestra Android Logcat.

- Apri l'elenco dei dispositivi. Potrebbe essere visualizzato il messaggio
No Devicese al momento non è connesso alcun dispositivo.

- Fai clic su Altre opzioni di connessione e inserisci l'indirizzo IP di Chromebook.

- Fai clic su Connetti. Dovresti visualizzare una finestra Operazione riuscita:

Ora il tuo Chromebook viene visualizzato nell'elenco Run Device di Unity (potrebbe essere necessario aggiornare prima lo schermo):

Ora puoi eseguire il deployment dei giochi su Chromebook e iniziare a testarli e svilupparli su hardware simile a quello di un PC.
6. Eseguire il deployment di una build di test
Google Play Giochi richiede di implementare una versione x86 del gioco, che fa parte del modo in cui raggiunge i benchmark di prestazioni sui PC. Tutte le varianti LTS di Unity possono generare build Android compatibili con x86 e x86-64 (etichettate come "ChromeOS") e Unity versione 2018 e precedenti possono generare build x86. Per sbloccare queste architetture, devi prima passare al backend di scripting IL2CPP, che probabilmente utilizzi già in produzione per il supporto di arm64.
- Seleziona File -> Build Settings per aprire la finestra Build Settings, quindi fai clic su Player Settings.

- Vai alla sezione Altre impostazioni e imposta
Scripting BackendsuIL2CPP.

Ti consigliamo di attivare anche il supporto x86 o x86-64. Per la pubblicazione sulla piattaforma Google Play Games è necessario supportare solo x86, anche se consigliamo x86-64.

Anche la versione della libreria Frame Pacing inclusa in Unity è incompatibile con Google Play Giochi e causa l'arresto anomalo del gioco all'avvio.
- Per disattivare la spaziatura dei fotogrammi dalla finestra Impostazioni del player, apri la sezione Risoluzione e presentazione e deseleziona Spaziatura dei fotogrammi ottimizzata.

Ora puoi iniziare a creare.
- Apri di nuovo la finestra Impostazioni build e fai clic su Build ed esegui. Il gioco viene visualizzato nella finestra dell'emulatore.

Se non riesci a eseguire il deployment del gioco, controlla se "Google HPE device (localhost:6520)" viene visualizzato nell'elenco "Run Device" (Esegui dispositivo). Se non è presente, assicurati che HPE_Dev sia in esecuzione e che tu possa vedere la schermata Home di Android. Se ancora non viene visualizzato nell'elenco dei dispositivi, esegui adb connect localhost:6520 con l'adb.exe esatto che stai utilizzando. Se utilizzi il plug-in Android Logcat Unity, seleziona Strumenti -> Apri terminale per aprire un terminale nella directory con lo stesso adb.exe utilizzato da Unity.
Apri Terminale" evidenziato" 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. Adattare il gioco per PC
Se possibile, cerca di apportare modifiche al gioco in base a metriche indipendenti dalla piattaforma o alla presenza di determinate funzionalità. Ad esempio, un giocatore su Android può collegare un mouse e una tastiera o un monitor. Se modifichi lo schema di controllo o gli elementi dell'HUD in base alla configurazione del dispositivo, puoi sfruttare Google Play Giochi per PC su tutte le piattaforme supportate.
Se è opportuno modificare la logica in base al fatto che il giocatore si trovi o meno in Google Play Giochi o ChromeOS, questo script ti aiuta a rilevarlo controllando la funzionalità di sistema 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
}
I PC hanno un display più grande rispetto al tipico smartphone Android. Se possibile, consigliamo che l'HUD occupi non più del 20% dello schermo. Poiché molti giochi per dispositivi mobili utilizzano l'opzione "Scala con le dimensioni dello schermo", passare a "Dimensioni fisiche costanti" o "Dimensioni in pixel costanti" può essere un buon primo passo per raggiungere questo obiettivo.

Potresti anche voler impostare dinamicamente le impostazioni di qualità utilizzando il comando QualitySettings.SetQualityLevel in fase di runtime se rilevi che stai eseguendo l'app in Google Play Giochi. L'emulatore Google Play Giochi utilizza ANGLE per emettere comandi DirectX o Vulkan nativi da OpenGL Unity, in modo da ottenere una fedeltà grafica superiore rispetto a quella disponibile nelle build di giochi per dispositivi mobili.
8. Gestione dell'input
I giochi pubblicati su Google Play Games devono essere progettati per l'input da mouse e tastiera. Dovrai pianificare come interagire con il gioco con mouse e tastiera, quindi prenditi il tempo necessario per acquisire il unitypackage dell'SDK Input. Se non vedi un download in quella pagina, assicurati di aver eseguito l'accesso con un account del gruppo play-mp-libs.
A scopo di test, molti giochi creano controlli di base per mouse e tastiera per lo sviluppo nell'editor. Se possibile, ti consigliamo di attivarle quando utilizzi un dispositivo ChromeOS o l'emulatore Google Play Giochi.
Per impostazione predefinita, Google Play Giochi e ChromeOS convertono l'input del mouse in un tocco simulato. Se utilizzi Input.GetTouch e Input.touchCount, il gioco continua a funzionare come previsto. Se utilizzi l'input multitocco, ad esempio i controlli con due pollici o il pizzico per zoomare, devi mappare l'azione alle pressioni dei tasti. Devi anche mappare le azioni di gioco alla pressione dei tasti, ad esempio premere i per aprire l'inventario, Esc per chiudere le finestre di dialogo e Invio per inviare messaggi in-game.
Il microgioco Platform 2D utilizza le frecce per muoversi e la barra spaziatrice per saltare. Se utilizzi il tuo gioco, assicurati di avere le assegnazioni dei tasti che preferisci per il passaggio successivo.
9. Integrazione dell'SDK di input
Ora che hai configurato i controlli del mouse e della tastiera, devi aggiungere il supporto dell'SDK Input . In questo modo, i giocatori possono scoprire i tuoi input per PC con un pratico popover:
- Dopo aver importato l'SDK nel tuo progetto, crea un file denominato
InputMappingProviderBehaviour.cse aggiungi questi contenuti:
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
{
}
}
- Ora compila
ActionIdscon l'elenco delle azioni che utilizzi nel gioco. Per il microgioco Platform 2D, le azioni sono Sinistra, Destra e Salto:
private enum ActionIds
{
Left,
Right,
Jump
}
- In
OnProvideInputMap, crea unInputActionper ogni azione. Per questo, devi conoscere il nome dell'azione, l'input e i pulsanti del mouse o i codici chiave a cui verrà associata. Per il gioco di esempio:
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
}
}
};
- Successivamente, raggruppa queste azioni di input.
Per il microgioco abbiamo un solo gruppo, ma puoi crearne quanti ne vuoi per aiutare i giocatori a trovare le azioni di cui hanno bisogno. Aggiungi questo codice a OnProvideInputMap:
var movementInputGroup = new InputGroup
{
GroupLabel = "Movement",
InputActions = new List<InputAction>
{
leftAction, rightAction, jumpAction
}
};
- Aggiungi alla mappa di input tutti i gruppi di input che hai creato. Modifica la dichiarazione di reso in
OnProvideInputMapin modo che reciti:
return new InputMap
{
InputGroups = new List<InputGroup> { movementInputGroup },
MouseSettings = new MouseSettings
{
InvertMouseMovement = false,
AllowMouseSensitivityAdjustment = false
}
};
- Infine, aggiungi lo script che hai creato al tuo gioco:

- Quando esegui di nuovo il deployment del gioco, premi
Shift+Tabper aprire l'overlay in-game.

- Fai clic su Controlli per visualizzare i controlli che hai configurato.

10. Rimuovere le visualizzazioni web incorporate
Per offrire ai tuoi giocatori un'esperienza ottimale, devi rimuovere le visualizzazioni web incorporate. È comune utilizzare le librerie WebView incorporate per visualizzare elementi come le Norme sulla privacy o i Termini di servizio. Sebbene funzionino in Google Play Giochi, vengono visualizzati in un browser "mobile" incorporato, anziché nel browser desktop preferito dal giocatore, e potrebbero causare confusione per i giocatori su PC. Pertanto, in Unity, se utilizzi estensioni per mostrare un browser incorporato, torna a Application.OpenURL(url).
11. Autorizzazioni e funzionalità
Esistono diverse funzionalità e autorizzazioni di Android non supportate in Google Play Games. Una regola generale è che la build del PC non deve mai mostrare una finestra di dialogo delle autorizzazioni. Ora che la build è pronta, ti consigliamo di eseguire una tipica nuova installazione e annotare tutte le finestre di dialogo visualizzate da aggiungere all'elenco delle cose da fare per l'invio del gioco.
Alcuni giochi Unity richiedono autorizzazioni utilizzando l'API Android.Permission. Devi racchiuderli nei controlli if (GoogleDeviceUtilities.IsGooglePlayGames) e passare direttamente alla logica di errore, se applicabile.
12. Ottimizzazioni per il desktop
Google Play Giochi presenta alcune differenze rispetto a un tipico smartphone Android e potresti voler configurare il gioco di conseguenza.
Passa a DXT per la compressione delle texture. I formati di texture Android comuni, come ETC, vengono decodificati in memoria in fase di runtime se non possono essere trasferiti direttamente alla GPU di un player. ASTC offre la migliore compatibilità con i computer, anche se devi utilizzare uno strumento di profilazione della GPU del computer per verificare il comportamento previsto per il tuo gioco.

Poiché ora utilizzi una GPU per computer, potresti anche voler aumentare la qualità della grafica. Puoi modificarlo direttamente in Impostazioni progetto nella sezione Qualità.

13. Complimenti
Hai tutto ciò che ti serve per iniziare a lavorare al tuo gioco per Google Play Giochi. Puoi iniziare a testare e iterare il tuo gioco. Ricorda che, anche se puoi mantenere la stessa base di codice, dovrai adattare il gioco in modo che sembri un gioco nativo per PC.
Passaggi successivi
Per pubblicare un gioco su Google Play Giochi è necessario svolgere altre attività:
- Per le informazioni più recenti, consulta la guida rapida.
- Esegui l'upgrade all'accesso ai servizi per i giochi di Play v2 per consentire l'accesso automatico di un giocatore all'avvio e soddisfare i requisiti di continuità.
- Implementa l'API Play Integrity per assicurarti che l'esperienza su PC sia sicura come quella su dispositivo mobile.
Infine, gran parte del lavoro che hai svolto finora per supportare Google Play Giochi ti aiuta anche a pubblicare su ChromeOS e dovresti prendere in considerazione il supporto di questa piattaforma insieme al PC.