1. Introduzione

Ultimo aggiornamento: 18/10/2022
Come si prepara un gioco per Google Play Games su PC?
Google Play Games 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 dell'elenco 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 Games 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 Games.
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) Configura 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 o 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 invariata l'opzioneAndroid NDK.

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 dover modificare anche 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 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 Games richiede di implementare una versione x86 del gioco, che fa parte del modo in cui raggiunge i benchmark delle prestazioni sui PC. Tutte le varianti LTS di Unity possono generare build Android compatibili con x86 e x86-64 (con l'etichetta "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 Games 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. Pertanto, la modifica dello schema di controllo o degli elementi dell'HUD in base alla configurazione del dispositivo consente di sfruttare Google Play Games su PC su tutte le piattaforme supportate.
Se ha senso modificare la logica in base al fatto che il giocatore si trovi o meno in Google Play Games 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 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 Games 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 mobile.
8. Gestione dell'input
I giochi pubblicati su Google Play Games devono essere progettati per l'input di mouse e tastiera. Dovrai pianificare come interagire con il tuo 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 Games 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 aumentare lo zoom, 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 un gioco personalizzato, 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 degli input tutti i gruppi di input che hai creato. Modifica la dichiarazione return 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 un'esperienza ottimale ai tuoi giocatori, 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 in controlli if (GoogleDeviceUtilities.IsGooglePlayGames) e passare direttamente alla logica di errore, se applicabile.
12. Ottimizzazioni per il desktop
Google Play Games 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 Games. 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 Games è necessario svolgere altre attività:
- Per le informazioni più recenti, consulta la guida rapida.
- Esegui l'upgrade all'accesso a Play Games Services 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 svolto finora per supportare Google Play Games ti aiuta anche a pubblicare su ChromeOS e dovresti prendere in considerazione il supporto di questa piattaforma insieme al PC.