Wstęp
Poniżej znajduje się przewodnik dotyczący debugowania procesu kompilacji i budowania gier Unity przy użyciu zestawu Firebase SDK for Unity. Opisuje, jak zbadać i rozwiązać wiele typowych problemów, które można napotkać podczas konfigurowania i tworzenia gry na nową platformę lub po aktualizacji. Jest uporządkowany według tego, kiedy te błędy mogą wystąpić w procesie. Zapoznaj się z nimi w kolejności i kontynuuj, gdy każdy zostanie rozwiązany.
Oprócz tego dokumentu zapoznaj się z często zadawanymi pytaniami dotyczącymi Firebase for Unity, aby uzyskać więcej informacji.
Problemy z kompilacją trybu Play
Pierwsza klasa problemów z kompilacją może wystąpić podczas testowania w edytorze przed próbą rozpoczęcia kompilacji mobilnej. Ta sekcja dotyczy wszystkich błędów Firebase, które występują przed i podczas trybu Play.
Gdy Unity uruchomi się lub wykryje zmiany w zależnościach, kodzie lub innych zasobach, spróbuje odbudować projekt. Jeśli projekt nie może się skompilować w tym czasie, edytor zarejestruje błędy kompilacji w konsoli, a jeśli spróbujesz wejść w tryb odtwarzania, w zakładce Scena Unity pojawi się wyskakujące okienko z komunikatem All compiler errors have to be fixed before you can enter playmode!
.
Debugowanie problemów z kompilacją związanych z Firebase
Brakujące typy, klasy, metody i składowe
Wiele problemów z Firebase wynika z niemożności znalezienia przez edytor i kompilator niezbędnych typów, klas, metod i członków. Typowymi objawami tego są warianty następujących czynności:
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>'
Kroki rozwiązania:
Jeśli używasz klas lub metod Firebase w kodzie, upewnij się, że je udostępniasz, mając odpowiednie dyrektywy
using
dla poszczególnych potrzebnych produktów Firebase.Sprawdź, czy zaimportowałeś odpowiednie pakiety Firebase:
- Aby zaimportować odpowiednie pakiety:
- Dodaj Firebase Unity SDK jako
.unitypackage
s lub - Przyjrzyj się i wykonaj jedną z alternatyw opisanych w opcjach instalacji modułu dodatkowego .
- Dodaj Firebase Unity SDK jako
- Upewnij się, że każdy produkt Firebase w Twoim projekcie i EDM4U :
- Są w tej samej wersji
- Zostały zainstalowane wyłącznie jako
.unitypackage
LUB wyłącznie za pośrednictwem Menedżera pakietów Unity.
- Aby zaimportować odpowiednie pakiety:
Jeśli zaimportowałeś pakiet Firebase Unity SDK przed wersją „10.0.0” jako
.unitypackage
s, archiwum ZIP Firebase Unity SDK zawiera pakiety obsługujące zarówno .NET 3.x, jak i .NET 4.x. Upewnij się, że w projekcie uwzględniono tylko zgodny poziom platformy .NET Framework:- Zgodność między wersjami Unity Editor i .NET Frameworks Poziomy są omówione w artykule Dodawanie Firebase do projektu Unity .
- Jeśli przypadkowo zaimportowałeś pakiety Firebase na niewłaściwym poziomie .NET Framework lub musisz przełączyć się z używania
.unitypackage
s na jedną z opcji instalacji Dodatkowa jednostka Unity , najczystszym sposobem jest usunięcie każdego pakietu Firebase za pomocą metod wymienionych w tej sekcji migracji i następnie ponownie zaimportuj wszystkie pakiety Firebase.
Sprawdź, czy Twój edytor przebudowuje Twój projekt i czy Twoje próby odtwarzania odzwierciedlają najbardziej aktualny stan Twojego projektu:
- Domyślnie edytor Unity jest ustawiony na przebudowę po każdym wykryciu zmian zasobów lub konfiguracji.
- Możliwe, że ta funkcja została wyłączona i że Unity Editor jest ustawiony na ręczne odświeżanie/rekompilację . Zbadaj to i spróbuj ręcznie odświeżyć, jeśli tak jest.
Błędy uruchomieniowe trybu Play
Jeśli Twoja gra uruchamia się, ale podczas działania występują problemy z Firebase, wypróbuj te rozwiązania:
Upewnij się, że zatwierdzasz pakiety Firebase w sekcji „Bezpieczeństwo i prywatność” w systemie Mac OS
Jeśli podczas uruchamiania gry w edytorze w systemie Mac OS zostanie wyświetlone okno dialogowe „FirebaseCppApp-<wersja>.bundle Nie można otworzyć, ponieważ nie można zweryfikować programisty”, musisz zatwierdzić ten konkretny plik pakietu w Menu Bezpieczeństwo i prywatność Maca.
Aby to zrobić, kliknij ikonę Apple > Preferencje systemowe > Bezpieczeństwo i prywatność
W menu zabezpieczeń, mniej więcej w połowie strony, znajduje się sekcja z informacją „FirebaseCppApp-<wersja>.bundle” została zablokowana, ponieważ nie pochodzi od zidentyfikowanego programisty”.
Kliknij przycisk oznaczony Mimo to zezwalaj .
Wróć do Unity i ponownie naciśnij Play .
Zobaczysz ostrzeżenie podobne do pierwszego:
Naciśnij Otwórz , a twój program będzie mógł kontynuować; nie będziesz więcej pytany o ten konkretny plik.
Upewnij się, że Twój projekt zawiera prawidłowe pliki konfiguracyjne i używa ich
- Upewnij się, że ustawienia kompilacji są ustawione dla zamierzonego celu (iOS lub Android) w Plik > Ustawienia kompilacji . Aby uzyskać pełniejszą dyskusję, przeczytaj dokumentację ustawień Unity Build .
- Pobierz plik konfiguracyjny dla swojej aplikacji (
google-services.json
na Androida lubGoogleService-Info.plist
na iOS) i zbuduj cel z konsoli Firebase w Ustawieniach projektu > Twoje aplikacje : Jeśli masz już te pliki, usuń je ze swojego projektu i zastąp je najnowszą wersją, upewniając się, że ich pisownia jest dokładnie taka, jak pokazano powyżej, bez „(1)” lub innych cyfr dołączonych do nazw plików. - Jeśli konsola zawiera komunikat dotyczący plików w
Assets/StreamingAssets/
, upewnij się, że nie ma komunikatów konsoli mówiących, że Unity nie może tam edytować plików - Upewnij się, że
Assets/StreamingAssets/google-services-desktop.json
został wygenerowany i pasuje do pobranego pliku konfiguracyjnego.- Jeśli nie jest generowany automatycznie i
StreamingAssets/
nie istnieje, ręcznie utwórz katalog w kataloguAssets
. - Sprawdź, czy Unity wygenerowało teraz
google-services-desktop.json
.
- Jeśli nie jest generowany automatycznie i
Upewnij się, że każdy produkt Firebase i EDM4U zostały zainstalowane wyłącznie za pośrednictwem .unitypackage
lub Unity Package Manager
- Sprawdź zarówno folder
Assets/
jak i Unity Package Manager, aby upewnić się, że zestawy SDK Firebase i EDM4U zostały zainstalowane wyłącznie za pomocą jednej lub drugiej metody. - Niektóre wtyczki opracowane przez Google , takie jak Google Play, oraz wtyczki innych firm mogą zależeć od EDM4U. Te wtyczki mogą zawierać EDM4U w swoich pakietach
.unitypackage
lub Unity Package Manager (UPM). Upewnij się, że w twoim projekcie jest tylko jedna kopia EDM4U. Jeśli jakiekolwiek pakiety UPM zależą od EDM4U, najlepiej jest zachować tylko wersje UPM EDM4U, które można znaleźć na stronie Google APIs for Unity Archive .
Upewnij się, że każdy produkt Firebase w Twoim projekcie jest w tej samej wersji.
- Jeśli pakiety Firebase SDK zostały zainstalowane za pomocą
.unitypackage
, sprawdź, czy wszystkie bibliotekiFirebaseCppApp
w obszarzeAssets/Firebase/Plugins/x86_64/
mają tę samą wersję. - Jeśli zestawy SDK Firebase zostały zainstalowane za pomocą Unity Package Manager (UPM), otwórz Windows > Menedżer pakietów , wyszukaj „Firebase” i upewnij się, że wszystkie pakiety Firebase mają tę samą wersję.
- Jeśli Twój projekt zawiera różne wersje pakietów SDK Firebase, zalecamy całkowite usunięcie wszystkich pakietów SDK Firebase przed ponownym zainstalowaniem wszystkich pakietów SDK Firebase, tym razem z tymi samymi wersjami. Najczystszym sposobem jest usunięcie każdego pakietu Firebase za pomocą metod wymienionych w tej sekcji dotyczącej migracji .
Błędy kompilacji programu rozpoznawania nazw i urządzenia docelowego
Jeśli Twoja gra działa w edytorze (skonfigurowanym dla wybranego celu kompilacji), następnie sprawdź, czy Menedżer zależności zewnętrznych dla Unity (EDM4U) jest poprawnie skonfigurowany i działa.
Repozytorium EDM4U GitHub zawiera przewodnik krok po kroku dotyczący tej części procesu, który należy przejrzeć i wykonać przed kontynuowaniem.
Problemy i minifikacje „Single Dex” ( obowiązkowe w przypadku korzystania z Cloud Firestore)
Podczas tworzenia aplikacji na Androida możesz napotkać błąd kompilacji związany z posiadaniem jednego pliku dex. Komunikat o błędzie wygląda podobnie do następującego (jeśli twój projekt jest skonfigurowany do korzystania z systemu kompilacji Gradle):
Cannot fit requested classes in a single dex file.
Pliki .dex
służą do przechowywania zestawu definicji klas i powiązanych z nimi danych pomocniczych dla aplikacji na Androida. Pojedynczy plik dex jest ograniczony do odniesienia do 65 536 metod; kompilacje zakończą się niepowodzeniem, jeśli łączna liczba metod ze wszystkich bibliotek Androida w twoim projekcie przekroczy ten limit.
Następujące dwa kroki można zastosować sekwencyjnie; włączaj multidex tylko wtedy, gdy minifikacja nie rozwiąże problemu.
Włącz minifikację
Unity wprowadził Minifikację w 2017.2, aby usunąć nieużywany kod, co może zmniejszyć całkowitą liczbę przywoływanych metod w jednym pliku dex. * Opcję można znaleźć w Ustawieniach odtwarzacza > Android > Ustawienia publikowania > Minify . * Opcje mogą się różnić w różnych wersjach Unity, więc zapoznaj się z oficjalną dokumentacją Unity.
Włącz Multidex
Jeśli po włączeniu minifikacji liczba przywoływanych metod nadal przekracza limit, inną opcją jest włączenie multidex
. Istnieje wiele sposobów osiągnięcia tego w Unity:
- Jeśli niestandardowy szablon ocen w ustawieniach odtwarzacza jest włączony, zmodyfikuj
mainTemplate.gradle
. - Jeśli do skompilowania wyeksportowanego projektu używasz Android Studio, zmodyfikuj plik build.gradle na poziomie modułu.
Więcej szczegółów można znaleźć w instrukcji obsługi multidexu .
Zrozumienie i naprawa błędów wykonawczych urządzenia docelowego
Jeśli Twoja gra działa w edytorze i można ją zbudować i zainstalować na urządzeniu docelowym, ale napotykasz błędy w czasie wykonywania, sprawdź i zbadaj dzienniki wygenerowane na urządzeniu .
W tej sekcji opisano sposób sprawdzania dzienników pod kątem możliwych błędów i jednego takiego błędu, który występuje tylko w czasie wykonywania na urządzeniu lub symulatorze.
Android
Symulator
- Sprawdź logi wyświetlane w konsoli emulatora lub przejrzyj okno Logcat .
Urządzenie
Zapoznaj się z adb i adb logcat oraz jak z nich korzystać.
- Chociaż możesz użyć różnych narzędzi środowiska wiersza poleceń do filtrowania danych wyjściowych, rozważ alternatywne spojrzenie na opcje programu logcat.
Prostym sposobem na rozpoczęcie sesji ADB z czystym kontem jest:
adb logcat -c && adb logcat <OPTIONS>
gdzie
OPTIONS
to dowolne flagi, które przekazujesz w wierszu poleceń, aby przefiltrować dane wyjściowe.
Korzystanie z Logcat przez Android Studio
Podczas korzystania z Logcat za pośrednictwem Android Studio dostępne są dodatkowe narzędzia wyszukiwania , które ułatwiają generowanie produktywnych wyszukiwań.
iOS
Inspekcja dzienników
Jeśli korzystasz z urządzenia fizycznego, podłącz je do komputera. Sprawdź lldb w Xcode.
Szybkie problemy
Jeśli napotkasz dzienniki błędów wspominające o Swift, zapoznaj się z sekcją External Dependency Manager for Unity dotyczącą ich.
Dalsze kroki
Jeśli w Twojej grze nadal występują problemy z kompilacją, tworzeniem lub uruchamianiem związane z Firebase, przejrzyj stronę problemów z Firebase SDK for Unity i rozważ zgłoszenie nowego problemu. Ponadto zapoznaj się ze stroną wsparcia Firebase, aby dowiedzieć się więcej o dodatkowych opcjach.