Questa guida illustra un tipico ciclo di sviluppo di un gioco. Dopo aver letto questo guida, potrebbe essere utile utilizzarlo anche come riferimento.
Quando lavori con Unity, il ciclo di vita dello sviluppo è costituito da tre fasi:
- Pianificazione e progettazione
- Sviluppa e testa
- Pubblicazione e gestione
Pianificazione e progettazione
Nella fase di pianificazione e progettazione, stabilisci come sviluppare il tuo gioco. Tu decidere come affrontare le sfide dello sviluppo per i dispositivi mobili identificare gli strumenti e i processi da usare nello sviluppo.
Ricevi feedback da tutti i membri del team
Lavora con arte, ingegneria, design, audio e di produzione per identificare e registrare le attività di implementazione. Ad esempio:
- I team artistici potrebbero creare texture delle risorse e budget mesh per i personaggi e ambienti di lavoro.
- Il team di engineering potrebbe determinare i punti di controllo della memoria e delle prestazioni la profilazione di ogni piattaforma.
- Il design potrebbe pianificare le meccaniche di gioco che consentono l'esperienza.
- Gli esperti audio potrebbero rivedere i requisiti per la continuità del suono tra UI, suoni spaziali 2D e 3D.
- La produzione potrebbe comunicare i requisiti di lancio e mantenere team allineati e in linea.
Progetta per dispositivi mobili
Lo sviluppo di applicazioni per le piattaforme mobile richiede considerazioni specifiche, quali:
- Proporzioni dello schermo variabili
- Consumo energetico
- Limitazione termica e del processore
- Input tocco
- Sviluppo multipiattaforma
- API grafiche (Vulkan o OpenGL ES)
Per maggiori dettagli sulle considerazioni specifiche per la progettazione per i dispositivi mobili, vedi Sviluppo Android in Unity da Unity e il Google Play Academy.
Sviluppa e testa
Nella fase di sviluppo e test, crei il tuo gioco, esegui test e preparazione pre-lancio. Fai alcuni passaggi interni test su Google Play per prepararti a soddisfare i requisiti del lancio. Puoi perfezionare i tuoi di deployment e organizzare gli asset in Unity in base alla Play Asset Delivery e Unity Indirizzabili sistemi operativi.
Le seguenti sezioni descrivono gli strumenti e le tecniche Unity progettati per aiutarti a sviluppare app per Android.
Rendering
Il rendering è il processo di disegno di asset 3D e 2D dalla tua scena Unity sullo schermo. Mentre il motore Unity gestisce il rendering, è importante considerare alcuni fattori per la piattaforma Android.
Texture
Determina se sono necessarie le dimensioni più grandi della texture, in base al target dispositivi mobili. Quando profila allocazione della memoria, i potenziali risparmi derivanti dalla modifica del target dimensioni della texture.
Durata frame
Per evitare il surriscaldamento sui dispositivi Android, la durata frame target inferiori a 21 millisecondi in media. A volte, ad esempio durante caricamento o brevi esperienze cinematografiche, la durata dei frame può superare i 21 millisecondi, ma dovresti rimanere al di sotto dei 21 di millisecondi per l'esperienza di gioco principale.
Se non lo fai, sulle piattaforme mobile la VSync forzata limita la frequenza fotogrammi. raggiungere l'obiettivo minimo. Ad esempio, in un aggiornamento dello schermo a 60 Hz, se non premi 60 FPS, il gioco è limitato a 30 FPS; se non raggiungi la soglia di 30, è limitata 15.
Molti dispositivi Android hanno frequenze di aggiornamento del display di 60 Hz e 120 Hz. Valuta i vantaggi di un targeting con durate frame molto più ridotte (target di 10 ms per aggiornamento a 60 Hz e 5 ms per 120 Hz) senza rischiare la limitazione termica e per ottenere velocità di rendering più elevate.
Per impostare una frequenza fotogrammi specifica nel tuo gioco in Unity, usa Application.targetFrameRate.
La libreria di pacing del frame di Android consente di eseguire il rendering in modo fluido quando l'applicazione impiega più tempo per presentare il frame successivo di quella richiesta dalla frequenza di aggiornamento dello schermo. Per le versioni Unity 2021 e successive: Se attivi il pacing frame Android, la frequenza di aggiornamento del display viene impostata sul la migliore corrispondenza per la frequenza frame target. In questo modo il gioco scarica la batteria in caso di aggiornamenti non necessari del display.
Per attivare la libreria, in Impostazioni progetto > Player, sotto Impostazioni per Android, seleziona la casella di controllo Pacing del frame ottimizzato.
API Vulkan
Vulkan è una piattaforma 3D multipiattaforma ad alte prestazioni Graphic User Interface con un overhead ridotto rispetto a OpenGL ES. Unity può usare Vulkan in due modi diversi.
API Auto Graphics
Puoi utilizzare l'API Auto Graphics con Vulkan, ma questo può avere a seconda della versione Unity installata. Puoi selezionare andando su Impostazioni progetto > Player > per il rendering.
Quando scegli la versione di Unity, tieni presente le seguenti considerazioni usa:
- Unity 2021.1 e le versioni precedenti non supportano Vulkan con API Graphics. Unity cerca di utilizzare OpenGL ES 3.2. Se il dispositivo non supporta OpenGL ES 3.2, Unity torna a OpenGL ES 3.1, 3.0 o 2.0, in questo ordine.
- Unity 2021.2 e le versioni successive utilizzano prima Vulkan. Se il dispositivo non supporta Vulkan, Unity utilizza la versione OpenGL ES 3.2, 3.1, 3.0 o 2.0.
API grafiche manuali
In alternativa, puoi abilitare Vulkan manualmente disabilitando l'API Auto Graphics. Se utilizzi Unity 2021.1 o una versione precedente, questo è l'unico modo per utilizzare Vulkan.
Se Vulkan è ordinato in una posizione più alta in questo elenco rispetto a OpenGL ES, Unity tenta innanzitutto di utilizzare Vulkan. Se il dispositivo non supporta Vulkan, Unity viene eseguito con OpenGL ES. Consulta la Guida introduttiva a Vulkan per informazioni dettagliate su Vulkan su Android, ad esempio come usare API grafiche moderne e ottimizzare le prestazioni del gioco.
Chiamate di disegno
Tutto ciò che è visualizzato sullo schermo è associato a una o più chiamate di disegno. Attivato piattaforme mobile, dovresti ottimizzare e ridurre il numero di chiamate di richiamo che da inviare alla GPU (Graphics Processing Unit).
Immagina le chiamate come quelle di un'auto in fila a un semaforo. Dopo il la spia diventa verde, può passare un certo numero di auto prima che il semaforo modifiche. Quando la spia diventa gialla, hai raggiunto il frame target ideale. (21 millisecondi) e, quando la spia diventa rossa, hai raggiunto il 33 di millisecondi. Qualsiasi passaggio del passato che abbia un impatto sul frame di rendering successivo, quindi la frequenza fotogrammi risultante è inferiore a quella target di 30 f/s.
Per informazioni su come migliorare le prestazioni della chiamata di estrazione nel gioco, vedi il raggruppamento in batch dell'assistenza Unity.
Shadows
Le chiamate di disegno della trasmissione shadow possono essere le più ad alta intensità di GPU, consumando Tempo di GPU anche per ambienti semplici. Per ridurre il costo della shadowcasting disegnare chiamate, provare a usare ombre morbide anziché ombreggiate. Se perché è ancora troppo costoso sulla GPU per i dispositivi di fascia bassa. Prendi in considerazione l'uso ombre blob invece di ombre chiare.
Texture
La texture consigliata per le texture RGB e RGBA su Android è ASTC. In Unity, l'opzione di compressione minima delle texture da usare su Android è ETC2. Puoi ricorrere a ETC2 come esegui il backup da ASTC in Impostazioni build Unity.
Puoi trovare un elenco completo dei formati supportati per piattaforma nella documentazione Unity all'indirizzo Manuale: formati di texture consigliati, predefiniti e supportati in base alla piattaforma.
Interfaccia utente e proporzioni
Puoi utilizzare Unity Simulatore di dispositivi lo strumento per visualizzare l'anteprima di vari orientamenti, risoluzioni dello schermo e direttamente nell'editor Unity. Puoi spostarti tra le visualizzazioni dei giochi e vista Simulatore del dispositivo.
Visualizza un'anteprima dello strumento alla pagina Simula il tuo gioco con il Simulatore di dispositivi in Unity.
Puoi trovare il codice sorgente di Trivial Kart nella esempi-giochi su GitHub.
Puoi verificare rapidamente il layout e la correttezza degli elementi canvas UI in Per visualizzare il Simulatore di dispositivi, seleziona le opzioni del dispositivo nel menu a discesa menu:
di Gemini Advanced.Per altre tecniche di ottimizzazione dell'interfaccia utente per Unity, guarda il seguente tutorial di Unity: Ottimizzazione della UI Unity.
Fisica
Il motore Nvidia PhysX è integrato in Unity. Le impostazioni predefinite può essere costoso sui dispositivi mobili, quindi tieni presente quanto segue:
- Considera la frequenza frame target e imposta di conseguenza il passo temporale fisso. L'impostazione predefinita è 0,02 ms o 50 Hz. Puoi aumentarlo a 0,03 oppure superiore per un target di 30 f/s.
- Valuta la possibilità di semplificare i collisori mesh e di ridurre al minimo la collisione degli strati Matrice per determinare le interazioni tra oggetti di gioco di uno strato specifico di testo.
Per informazioni su impostazioni di fisica e le ottimizzazioni per i giochi mobile, consulta Ottimizza l'eBook sui giochi mobile da Unity.
Profilo
Gli sviluppatori di app spesso trascurano o ignorano la profilazione finché l'applicazione raggiunge un punto di errore critico. È consigliabile programmare una sessione del tempo di profilazione durante il processo e utilizzare le seguenti best practice:
- Identifica i punti chiave durante lo sviluppo in cui è possibile assegnare la profilazione piuttosto che adattarle a caso.
- Salva gli snapshot del profilo da utilizzare con Strumento di analisi dei profili Unity.
- Profila il tuo gioco sui dispositivi di destinazione per ottenere un'immagine accurata di come il rendimento del gioco è nella fase di sviluppo attuale.
- Profila le diverse parti del tuo gioco.
- Delinea il modo in cui i giocatori utilizzano il gioco. (Non profilare solo il tuo gioco quando il dispositivo è in stato di inattività o è in una schermata di pausa).
- Profilo in modalità sostenuta dopo che il gioco è in esecuzione per un po' di tempo per individuare i problemi di limitazione che potresti riscontrare quando dispositivi sono adattati.
Puoi utilizzare i seguenti strumenti di profilazione separatamente o in combinazione.
Unity Profiler Unity Profiler è una piattaforma completamente integrata di analisi eseguibile sul tuo codice nell'editor Unity e connettersi al tuo dispositivo Android autonomo che esegue build in modalità di sviluppo.
GPU Inspector per Android con l'Ispettore GPU Android (AGI) puoi eseguire il debug a livello di frame. AGI anche analizza i servizi di sistema, tra cui GPU, CPU, memoria, batteria e GPU contatori.
Per informazioni dettagliate sulla profilazione del tuo gioco in Unity, guarda il video Introduzione alla profilazione in Unity oppure leggi il Guida definitiva alla profilazione dei giochi Unity, entrambi di Unity.
Gestione della memoria
I processi Android condividono la memoria disponibile sul dispositivo di destinazione. Dovresti utilizzo della memoria del profilo quando il dispositivo di test di destinazione dispone di ampia memoria libera Google Cloud. Esegui test di memoria con un punto del gioco per consentirti di confrontare le sessioni e le tendenze di utilizzo della memoria in modo appropriato.
Quando lavori con script scritti in C#, fai attenzione all'uso di stringhe, confronti di stringhe e allocazioni di oggetti correlati a stringhe (come JSON file per le impostazioni dei giochi). Generano spesso allocazioni di memoria frequenti contribuiscono alla frammentazione.
Valuta l'uso della classe
StringBuilder
per grandi sequenze di manipolazione delle stringhe, tramite la concatenazione in loco di
stringhe (come "questo" + "è" + "a" + "scarsa" + "idea" rispetto a
StringBuilder.Concat()
chiamate di funzione).
Per ulteriori informazioni sulle stringhe, vedi Stringhe e testo nella documentazione di Unity.
Valuta le risorse di testo TextAsset e JSON rispetto alle
Tipo di ScriptableObject
. ScriptableObjects
gestisce l'archiviazione dei dati tra scene
in modo efficiente e apportare modifiche ai tempi di Editor-to-Play.
Per una discussione sull'utilizzo di alternative all'impostazione predefinita Handle JSON per l'ottimizzazione mobile, consulta l'articolo L'ottimizzazione nascosta nei giochi in rete su Hutch.
Utilizza la API Memory Advice per determinare l'utilizzo della memoria in fase di runtime. L'API espone un indicatore di luce notturna per l'utilizzo elevato, normale e scarso della memoria. Tu puoi iscriverti all'indicatore per gli aggiornamenti o fare un sondaggio direttamente per il momento . Quando ricevi un segnale rosso, valuta la possibilità di ridurre l'oggetto del gioco o nella cache. Includi questo contesto nella telemetria del tuo gioco durante le live operazioni ed esame delle metriche delle prestazioni dopo il lancio.
Per un approfondimento sull'organizzazione della memoria sui dispositivi Android e su come Unity funziona, guarda Informazioni sull'utilizzo della memoria di Android (da Google I/O '18). Il video illustra i tipi di problemi di memoria e i casi in cui la memoria insufficiente il killer abbia effetto.
Garbage collection
La garbage collection in un ambiente di memoria gestito libera la memoria inutilizzata di frammenti che possono essere riciclati per un'applicazione. Segui best practice per la garbage collection per evitare allocazioni non necessarie di risorse di memoria.
Ad esempio, crea un pool di oggetti di gioco anziché utilizzare on demand
allocazioni (GameObject.Instantiate
). Per i pool di grandi dimensioni, considera
allocati su più frame per ridurre il rischio che il gioco
non risponde sui dispositivi Android di livello base.
Considera il seguente snippet di codice per una semplice coroutine richiamata da l'inizio di un monocomportamento:
// Option 1: Bad for memory management - causes allocation each iteration
IEnumerator UpdateEnemyTarget() {
while (enabled) {
yield return new WaitForSeconds(1.0f);
// Some intermittent function check
}
}
// Option 2: Better for memory management - allocation of yield instruction once, reused each iteration
private YieldInstruction waitForSecond = new WaitForSeconds(1.0f);
IEnumerator BetterUpdateEnemyTarget() {
while (enabled) {
yield return waitForSecond;
// Some other intermittent function
}
}
Puoi
modifica
il file modello MonoBehaviour per rimuovere i valori predefiniti Start()
Update()
stub per non lasciare inavvertitamente vuoto il campo
funzioni man mano che sviluppi.
Per una panoramica dell'ordine di esecuzione degli eventi monocomportamento, consulta Ordine di esecuzione delle funzioni evento nella documentazione di Unity. Per scoprire di più sulla gestione della memoria, consulta corso Gestione della memoria in Unity.
Per suggerimenti sull'ottimizzazione delle prestazioni dei giochi mobile, vedi Ottimizza le prestazioni dei tuoi giochi mobile: suggerimenti dei migliori ingegneri di Unity su profilazione, memoria e architettura del codice.
Pooling prefabbricato
I picchi di durata dei frame della CPU sono quasi completamente causati dall'istanza prefab durante il gameplay. Prendi in considerazione l'idea di preparare pool di oggetti per i proiettili, nemici in grado di generare ed effetti visivi prima di entrare nel gameplay per ridurre i picchi di avvio della CPU. Puoi distribuire altre ottimizzazioni su più "frame di inizializzazione" durante il caricamento sequenze introduttive nella scena.
Nella pagina Asset di Unity sono disponibili molti asset di pooling di terze parti Negozio relative alla gestione del pooling di oggetti di gioco. oppure crearne di personalizzate. Consulta Introduzione al pooling di oggetti su Unity.
Pubblicazione degli asset
Esistono dei limiti alle dimensioni dell'applicazione quando viene prima implementato in Google Play. A seconda delle dimensioni e della natura del gioco, potrebbero aver bisogno di alcune o di tutte le risorse del gioco (modelli dei personaggi, elementi UI e così via) per consentire ai giocatori di usufruire dell'esperienza desiderata.
Puoi utilizzare lo Play Asset Delivery (PAD) per gestire gli asset richiesti dal tuo gioco al momento dell'installazione, a seguire rapidamente o on demand. I pacchetti di asset Unity sono integrati a supporto PAD; inoltre, puoi utilizzare lo strumento per specificare quali elementi vengono pubblicati.
Indirizzabili
Configurazione di risorse dinamiche, come prefabbricati, texture e audio dei file. In fase di esecuzione, l'operazione non è più complessa ed esaminare il sistema di denominazione degli indirizzi. Indirizzabile asset separa il modo in cui disponi i contenuti da come crei e carichi i tuoi contenuti. Il sistema Addressables sostituisce le cartelle Resources e Asset Pacchetti per semplificare il modo in cui fare riferimento agli asset e caricarli in fase di runtime.
Per un esempio, vedi Progetto dimostrativo con il pacchetto Addressables su GitHub. Per maggiori dettagli sullo sviluppo degli indirizzi, consulta Addressable Asset System nel blog Unity.
Il layout degli asset indirizzabili presenta vantaggi e svantaggi per raggruppando un numero troppo basso di troppi asset nei pacchetti comuni. Per scoprire di più sulla gestione dei contenuti con Indirizzabili, vedi Semplifica la gestione dei contenuti con gli indirizzi IP.
Puoi configurare
demo indipendente e sperimentare le modalità di accesso per ottenere
a proprio agio con il sistema Addressables. Puoi anche vedere il progetto open source
BuildLayout Explorer per Unity 2019.3 e versioni successive,
ed esaminare il report buildlayout.txt
generato
Indirizzabili.
Gli asset di Chop Chop, un progetto aperto Unity, sono stati pacchettizzati utilizzando Sistema indirizzabile per tutte le operazioni di carico e scarico. Consulta Pacchetti di contenuti con asset indirizzabili | Apri sviluppo progetti per una procedura dettagliata della struttura e dell'impostazione della configurazione degli indirizzi bundle.
Nel progetto Chop Chop, l'unica scena caricata per impostazione predefinita, il campo
scena, è stata configurata per utilizzare AssetReferences
anziché i link diretti agli asset nella
progetto (scene, prefabbricati e così via).
Il codice sorgente per Progetto aperto Unity: Chop Chop è disponibile su GitHub. Sebbene il progetto non sia più in fase di sviluppo, il repository Git e la documentazione sono ancora disponibili.
Plug-in di terze parti
Se usi plug-in di terze parti, ad esempio nell'asset Unity Archivia, controlla le cartelle e rimuovi gli asset non necessari Cartelle delle risorse. Durante il processo di creazione, Unity raccoglie tutti gli asset inclusi nelle cartelle Resources e li pacchettizza in un accessibile in fase di runtime. Questo può aggiungere gonfiore al pacchetto finale, e spesso non sono necessari.
Per individuare rapidamente tutte le cartelle delle risorse, cerca Risorse nella Progetto dal riquadro. Puoi quindi selezionare ciascun elemento per identificare cosa contiene e se per il tuo gioco.
Pubblicazione e gestione
Quando è tutto pronto per lanciare il tuo gioco mobile, decidi chi vuoi per la release, come svolgere alpha e beta test e come monitorare delle prestazioni dopo il lancio.
Analizzare il feedback di una release limitata
Puoi lanciare la campagna per un pubblico limitato e mirato ed eseguire la versione beta su larga scala o attivare il gioco per renderlo disponibile completamente in tutti i mercati. Con un a release limitata, puoi ottimizzare le prestazioni dell'applicazione in base a un pubblico dal vivo e una raccolta di dispositivi.
Ad esempio, puoi utilizzare Android Performance Tuner per Unity e Google Analytics per Unity per ottenere approfondimenti sulle prestazioni dell'applicazione e sulle tendenze dei giocatori, da che il team di sviluppo può ottimizzare ed eseguire il push degli aggiornamenti. Puoi utilizzare anche di Analytics per pianificare sequel giochi correlati di un genere simile.
Alpha e beta test
Dopo aver configurato il profilo della tua applicazione Google Play Console, puoi preparare di alpha e beta test e distribuirle a un pubblico limitato per la revisione pre-lancio. Di il lancio a un pubblico limitato, potete risolvere eventuali problemi finali con un un pool di dispositivi e raccogliere il feedback iniziale a cui puoi rispondere prima di recarti in un luogo disponibili in una versione globale.
Le tue build Unity vengono distribuite tramite Android App Bundle. Per informazioni, vedi il Manuale: pubblicazione su Google Play da Unity, che descrive anche le modifiche dai file APK all'AAB formato.
Monitoraggio e tracciamento
Durante la fase di liveops e distribuzione del tuo gioco, puoi usare Android Vitals per monitorare i problemi di prestazioni sui dispositivi a cui potresti non aver avuto accesso durante sviluppo e test. Per maggiori dettagli, guarda Novità per i giochi in Copertura e dispositivi e Android vitals.
Spesso i team di sviluppo più grandi dispongono di pipeline di telemetria uniche e personalizzate per i giochi che forniscono metriche relative alle prestazioni del dispositivo. Ricordati di approfittare di del Android Performance Tuner (APT) e il plug-in Unity corrispondente per le metriche di connessione relative alle frequenze fotogrammi, fedeltà grafica, tempo di caricamento e abbandono del caricamento. Segui le guida passo passo di Integrazione di Android Performance Tuner nel gioco Unity.
Il ciclo di vita del tuo gioco non si interrompe dopo la trasmissione dal vivo. Monitorare, mantenere e rispondere alle prestazioni e ai feedback sono fondamentali utenti soddisfatti, recensioni positive e la migliore adozione del gioco in tutti i mercati.