introduzione
Di seguito è riportata una guida per eseguire il debug del processo di compilazione e compilazione per i giochi Unity utilizzando l'SDK Firebase per Unity. Descrive come indagare e risolvere molti dei problemi più comuni che puoi incontrare durante la configurazione e la creazione del tuo gioco per una nuova piattaforma o dopo un aggiornamento. È organizzato in ordine di quando questi errori possono verificarsi nel processo. Consultali in ordine e procedi man mano che ognuno viene risolto.
Oltre a questo documento, consulta le domande frequenti su Firebase for Unity per ulteriori informazioni.
Problemi di compilazione della modalità di gioco
La prima classe di problemi di build può verificarsi durante il test nell'editor prima di provare ad avviare una build mobile. Questa sezione riguarda tutti gli errori di Firebase che si verificano prima e durante la modalità di gioco.
Quando Unity si avvia o rileva modifiche a dipendenze, codice o altre risorse, tenterà di ricostruire il progetto. Se il progetto non può essere compilato in quel momento, l'editor registrerà gli errori di compilazione nella console e se tenti di accedere alla modalità di riproduzione, riceverai un popup di errore nella scheda Scena di Unity che legge All compiler errors have to be fixed before you can enter playmode!
.
Debug dei problemi di compilazione relativi a Firebase
Tipi, classi, metodi e membri mancanti
Molti problemi di Firebase si verificano a causa dell'incapacità dell'editor e del compilatore di trovare tipi, classi, metodi e membri necessari. I sintomi comuni di questo sono varianti di quanto segue:
The type or namespace name '<CLASS OR NAMESPACE NAME>' could not be found. Are you missing a using directive or an assembly reference?
The type or namespace name <TYPE OR NAMESPACE NAME> does not exist in the namespace 'Firebase<.OPTIONAL NESTED NAMESPACE NAME PATH>' (are you missing an assembly reference?)
'<CLASS NAME>' does not contain a definition for '<MEMBER VARIABLE OR METHOD NAME>'
Procedura di risoluzione:
Laddove utilizzi classi o metodi Firebase nel codice, assicurati di renderli disponibili disponendo delle direttive
using
corrette per i particolari prodotti Firebase necessari.Verifica di aver importato i pacchetti Firebase appropriati:
- Per importare i pacchetti appropriati:
- Aggiungi Firebase Unity SDK come
.unitypackage
s o - Esaminare ed eseguire una delle alternative nelle opzioni di installazione di Unity aggiuntive .
- Aggiungi Firebase Unity SDK come
- Assicurati che ogni prodotto Firebase nel tuo progetto e EDM4U :
- Sono alla stessa versione
- Sono stati installati esclusivamente come
.unitypackage
s OPPURE esclusivamente tramite Unity Package Manager.
- Per importare i pacchetti appropriati:
Se hai importato Firebase Unity SDK prima della versione "10.0.0" come
.unitypackage
s, l'archivio zip di Firebase Unity SDK contiene i pacchetti per il supporto di .NET 3.x e .NET 4.x. Assicurati di aver incluso solo il livello .NET Framework compatibile nel tuo progetto:- La compatibilità tra le versioni dell'editor di Unity e dei livelli di .NET Framework è illustrata in Aggiungere Firebase al progetto Unity .
- Se hai accidentalmente importato i tuoi pacchetti Firebase al livello .NET Framework sbagliato o hai bisogno di passare dall'utilizzo
.unitypackage
s a una delle opzioni di installazione di Additional Unity , il modo più pulito è rimuovere ogni pacchetto Firebase attraverso i metodi menzionati in questa sezione sulla migrazione e quindi reimporta nuovamente tutti i pacchetti Firebase.
Verifica che il tuo editor stia ricostruendo il tuo progetto e che i tuoi tentativi di riproduzione riflettano lo stato più attuale del tuo progetto:
- Per impostazione predefinita, l'editor di Unity è impostato per ricostruire ogni volta che vengono rilevate modifiche alle risorse o alla configurazione.
- È possibile che questa funzionalità sia stata disabilitata e che Unity Editor sia impostato su manual refresh/recompile . Indaga su questo e prova un aggiornamento manuale se questo è il caso.
Errori di runtime della modalità di riproduzione
Se il gioco si avvia, ma si verificano problemi con Firebase durante l'esecuzione, prova quanto segue:
Assicurati di approvare i pacchetti Firebase in "Sicurezza e privacy" su Mac OS
Se, all'avvio del gioco nell'editor su Mac OS, ti viene presentata una finestra di dialogo che dice "FirebaseCppApp-<versione>.bundle Impossibile aprire perché lo sviluppatore non può essere verificato.", devi approvare quel file bundle specifico in Menu Sicurezza e privacy del Mac.
Per fare ciò, fai clic sull'icona Apple > Preferenze di Sistema > Sicurezza e Privacy
Nel menu di sicurezza, circa a metà pagina, c'è una sezione che dice ""FirebaseCppApp-<version>.bundle" è stato bloccato perché non proviene da uno sviluppatore identificato."
Fare clic sul pulsante etichettato Consenti comunque .
Torna a Unity e premi di nuovo Riproduci .
Vedrai quindi un avviso simile al primo:
Premi Apri e il tuo programma potrà procedere; non ti verrà più chiesto informazioni su questo particolare file.
Assicurati che il tuo progetto contenga e utilizzi file di configurazione validi
- Assicurati che le impostazioni di build siano configurate per il target che intendi (iOS o Android) in File > Impostazioni build . Per una discussione più completa, leggi la documentazione sulle impostazioni di Unity Build .
- Scarica il file di configurazione per la tua app (
google-services.json
per Android oGoogleService-Info.plist
per iOS) e crea target dalla console Firebase in Impostazioni progetto > Le tue app : se disponi già di questi file, eliminali nel tuo progetto e sostituiscili con la versione più recente, assicurandoti che siano scritti esattamente come mostrato sopra senza "(1)" o altri numeri associati ai nomi dei file. - Se la console contiene un messaggio relativo ai file in
Assets/StreamingAssets/
, assicurati che non ci siano messaggi della console che dicono che Unity non è stato in grado di modificare i file lì - Assicurati che
Assets/StreamingAssets/google-services-desktop.json
sia generato e corrisponda al file di configurazione scaricato.- Se non viene generato automaticamente e
StreamingAssets/
non esiste, creare manualmente la directory nella directoryAssets
. - Controlla se Unity ha ora generato
google-services-desktop.json
.
- Se non viene generato automaticamente e
Assicurati che tutti i prodotti Firebase e EDM4U siano stati installati esclusivamente tramite .unitypackage
o Unity Package Manager
- Controlla sia la cartella
Assets/
che Unity Package Manager per assicurarti che gli SDK Firebase e EDM4U siano stati installati esclusivamente tramite uno o l'altro metodo. - Alcuni plug-in sviluppati da Google , come Google Play, e plug-in di terze parti possono dipendere da EDM4U. Questi plugin possono includere EDM4U nei loro pacchetti
.unitypackage
o Unity Package Manager (UPM). Assicurati che ci sia solo una copia di EDM4U nel tuo progetto. Se i pacchetti UPM dipendono da EDM4U, è meglio mantenere solo le versioni UPM di EDM4U, che possono essere trovate nella pagina API di Google per Unity Archive .
Assicurati che ogni prodotto Firebase nel tuo progetto abbia la stessa versione.
- Se gli SDK Firebase sono stati installati tramite
.unitypackage
, controlla se tutte le librerieFirebaseCppApp
inAssets/Firebase/Plugins/x86_64/
sono alla stessa versione. - Se gli SDK Firebase sono stati installati tramite Unity Package Manager (UPM), apri Windows > Package Manager , cerca "Firebase" e assicurati che tutti i pacchetti Firebase siano della stessa versione.
- Se il tuo progetto contiene versioni diverse degli SDK Firebase, ti consigliamo di rimuovere completamente tutti gli SDK Firebase prima di installare nuovamente tutti gli SDK Firebase, questa volta con le stesse versioni. Il modo più pulito è rimuovere ogni pacchetto Firebase attraverso i metodi menzionati in questa sezione sulla migrazione .
Errori di compilazione del resolver e del dispositivo di destinazione
Se il tuo gioco funziona nell'editor (configurato per l'obiettivo di build appropriato di tua scelta), verifica successivamente che l' External Dependency Manager for Unity (EDM4U) sia correttamente configurato e funzionante.
Il repository GitHub EDM4U contiene una guida passo passo per questa parte del processo che dovresti rivedere e seguire prima di procedere.
Problemi e minimizzazione di "Single Dex" ( obbligatorio se si utilizza Cloud Firestore)
Durante la creazione di un'app Android, potresti riscontrare un errore di compilazione relativo all'avere un singolo file dex. Il messaggio di errore è simile al seguente (se il progetto è configurato per utilizzare il sistema di compilazione Gradle):
Cannot fit requested classes in a single dex file.
I file .dex
vengono utilizzati per contenere una serie di definizioni di classe e i relativi dati aggiuntivi associati per le applicazioni Android. Un singolo file dex è limitato al riferimento a 65.536 metodi; le build falliranno se il numero totale di metodi da tutte le librerie Android nel tuo progetto supera questo limite.
I seguenti due passaggi possono essere applicati in sequenza; abilita multidex solo se la minificazione non risolve il problema.
Abilita minificazione
Unity ha introdotto la minificazione nel 2017.2 per eliminare il codice inutilizzato, che può ridurre il numero totale di metodi di riferimento in un singolo file dex. * L'opzione è disponibile in Impostazioni giocatore > Android > Impostazioni di pubblicazione > Minimizza . * Le opzioni possono differire nelle diverse versioni di Unity, quindi fare riferimento alla documentazione ufficiale di Unity.
Abilita Multidex
Se, dopo aver abilitato la minimizzazione, il numero di metodi di riferimento supera ancora il limite, un'altra opzione è abilitare multidex
. Ci sono diversi modi per raggiungere questo obiettivo in Unity:
- Se il modello Gradle personalizzato in Impostazioni lettore è abilitato, modifica
mainTemplate.gradle
. - Se utilizzi Android Studio per creare il progetto esportato, modifica il file build.gradle a livello di modulo.
Maggiori dettagli possono essere trovati nella guida per l'utente multidex .
Comprensione e correzione degli errori di runtime del dispositivo di destinazione
Se il tuo gioco funziona nell'editor e può essere compilato e installato sul tuo dispositivo di destinazione, ma riscontri errori di runtime, ispeziona e analizza i log generati sul dispositivo .
Questa sezione spiega come esaminare i log per possibili errori e uno di questi errori che si verifica solo in fase di esecuzione sul dispositivo o sul simulatore.
Androide
Simulatore
- Ispeziona i log visualizzati nella console dell'emulatore o visualizza la finestra Logcat .
Dispositivo
Familiarizza con adb e adb logcat e come usarli.
- Sebbene sia possibile utilizzare i vari strumenti dell'ambiente della riga di comando per filtrare l'output, considerare in alternativa di esaminare le opzioni di logcat.
Un modo semplice per avviare una sessione ADB con una lavagna pulita è:
adb logcat -c && adb logcat <OPTIONS>
dove
OPTIONS
sono i flag che passi alla riga di comando per filtrare l'output.
Utilizzo di Logcat tramite Android Studio
Quando si utilizza Logcat tramite Android Studio , sono disponibili strumenti di ricerca aggiuntivi che semplificano la generazione di ricerche produttive.
iOS
Registri di ispezione
Se utilizzi un dispositivo fisico, collegalo al computer. Ispeziona lldb in Xcode.
Problemi rapidi
Se ti imbatti in log di errori che menzionano swift, consulta la sezione External Dependency Manager for Unity relativa a loro.
Ulteriori passaggi
Se il tuo gioco presenta ancora problemi di compilazione, compilazione o esecuzione relativi a Firebase, esamina la pagina dei problemi di Firebase SDK per Unity e valuta la possibilità di segnalare un nuovo problema. Inoltre, fai riferimento alla pagina di supporto di Firebase per informazioni sulle opzioni aggiuntive.