Wprowadzenie
Poniżej znajdziesz przewodnik po debugowaniu procesu kompilacji i tworzenia gier na Unity przy użyciu pakietu SDK Firebase dla Unity. Znajdziesz w nim informacje o tym, jak zbadać i rozwiązać typowe problemy, które mogą wystąpić podczas konfigurowania i tworzenia gry na nową platformę lub po aktualizacji. Błędy są wymienione w takiej kolejności, w jakiej mogły wystąpić w trakcie procesu. Przejrzyj je po kolei i rozwiąż każdy z nich.
Więcej informacji znajdziesz w najczęstszych pytaniach dotyczących Firebase dla Unity.
Problemy z kompilacją w trybie gry
Pierwsza klasa problemów z kompilacją może wystąpić podczas testowania w edytorze przed uruchomieniem kompilacji na urządzeniu mobilnym. Ta sekcja dotyczy wszystkich błędów Firebase, które występują przed trybem odtwarzania i w jego trakcie.
Gdy Unity uruchamia się lub wykrywa zmiany w zależnościach, kodzie lub innych zasobach, próbuje ponownie skompilować projekt. Jeśli w danym momencie nie można skompilować projektu, edytor zarejestruje błędy kompilacji w konsoli. Jeśli spróbujesz przejść do trybu odtwarzania, na karcie Scena w Unity pojawi się wyskakujące okienko z błędem 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 elementy
Wiele problemów z Firebase występuje z powodu tego, że edytor i kompilator nie mogą znaleźć niezbędnych typów, klas, metod i elementów. Typowe objawy to:
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>'
Rozwiązanie problemu:
Jeśli w kodzie używasz klas lub metod Firebase, upewnij się, że są one dostępne, korzystając z odpowiednich dyrektyw
using
dla poszczególnych potrzebnych usług Firebase.Sprawdź, czy zaimportowano odpowiednie pakiety Firebase:
- Aby zaimportować odpowiednie pakiety:
- Dodaj pakiet SDK Firebase Unity jako pakiety
.unitypackage
lub - Zapoznaj się z dodatkowymi opcjami instalacji Unity i wybierz jedną z nich.
- Dodaj pakiet SDK Firebase Unity jako pakiety
- Upewnij się, że wszystkie usługi Firebase w Twoim projekcie i EDM4U:
- są w tej samej wersji.
- zostały zainstalowane wyłącznie jako
.unitypackage
LUB wyłącznie za pomocą Menedżera pakietów Unity;
- Aby zaimportować odpowiednie pakiety:
Jeśli masz zaimportowany pakiet Firebase Unity SDK w wersji wcześniejszej niż „10.0.0” (
.unitypackage
), archiwum ZIP pakietu Firebase Unity SDK zawiera pakiety obsługujące .NET 3.x i .NET 4.x. Upewnij się, że w projekcie uwzględniono tylko zgodny poziom .NET Framework:- Zgodność między wersjami poziomu Unity Editor i poziomów frameworków .NET jest omawiana w artykule Dodawanie Firebase do projektu Unity.
- Jeśli przypadkowo zaimportowano pakiety Firebase na niewłaściwym poziomie .NET Framework albo chcesz przełączyć się z
.unitypackage
na jedną z dodatkowych opcji instalacji Unity, najprostszym sposobem jest usunięcie wszystkich pakietów Firebase za pomocą metod opisanych w tej sekcji dotyczącej migracji, a następnie ponowne zaimportowanie wszystkich pakietów Firebase.
Sprawdź, czy edytor ponownie tworzy projekt i czy próby odtworzenia odzwierciedlają jego najnowszy stan:
- Domyślnie edytor Unity jest skonfigurowany tak, aby odtwarzać zasoby lub konfigurację za każdym razem, gdy zostaną wykryte zmiany.
- Możliwe, że ta funkcja została wyłączona, a Unity Editor jest skonfigurowany na ręczne odświeżanie/skompilowanie. Zbadaj tę kwestię i spróbuj ręcznie odświeżyć stronę.
Błędy działania trybu Play
Jeśli gra się uruchamia, ale podczas działania ma problemy z Firebase, wykonaj te czynności:
Zatwierdź pakiety Firebase w sekcji „Bezpieczeństwo i prywatność” w systemie macOS
Jeśli podczas uruchamiania gry w edytorze w systemie Mac OS pojawi się okno z komunikatem „Nie można otworzyć pliku FirebaseCppApp-<version>.bundle, ponieważ nie można zweryfikować dewelopera”, musisz zatwierdzić ten plik pakietu w menu Zabezpieczenia i prywatność na Macu.
Aby to zrobić, kliknij Ikona Apple > Preferencje systemowe > Ochrona i prywatność.
W menu bezpieczeństwa mniej więcej w połowie strony znajduje się sekcja z informacją „Użycie „FirebaseCppApp-<version>.bundle” zostało zablokowane, ponieważ nie pochodzi ono od zidentyfikowanego dewelopera”.
Kliknij przycisk Zezwól mimo to.
Wróć do Unity i ponownie naciśnij Play.
Zobaczysz wtedy ostrzeżenie podobne do pierwszego:
Naciśnij Otwórz, a program będzie mógł kontynuować. Nie będziemy Cię już pytać o ten konkretny plik.
Sprawdź, czy projekt zawiera prawidłowe pliki konfiguracji i czy używa ich.
- W sekcji Plik > Ustawienia kompilacji sprawdź, czy ustawienia kompilacji są ustawione zgodnie z wybranym urządzeniem docelowym (iOS lub Android). Dokładniejsze informacje znajdziesz w dokumentacji ustawień kompilacji Unity (w języku angielskim).
- Pobierz plik konfiguracyjny aplikacji (
google-services.json
w przypadku Androida lubGoogleService-Info.plist
na iOS) i cel kompilacji z konsoli Firebase w sekcji Ustawienia projektu > Twoje aplikacje. Jeśli masz już te pliki, usuń je w projekcie i zastąp je najnowszą wersją. Upewnij się, że są zapisane dokładnie w takiej formie, w jakiej są zapisane powyżej, bez „(1)” ani innych cyfr dołączonych do nazw plików. - Jeśli konsola zawiera komunikat dotyczący plików w folderze
Assets/StreamingAssets/
, sprawdź, czy nie ma na niej komunikatów informujących, że Unity nie może edytować tych plików. - Upewnij się, że wygenerowany został plik
Assets/StreamingAssets/google-services-desktop.json
i pasuje do pobranego pliku konfiguracyjnego.- Jeśli nie jest generowany automatycznie i
StreamingAssets/
nie istnieje, utwórz ręcznie katalog w kataloguAssets
. - Sprawdź, czy Unity wygenerowało
google-services-desktop.json
.
- Jeśli nie jest generowany automatycznie i
Sprawdź, czy wszystkie usługi Firebase i EDM4U zostały zainstalowane wyłącznie za pomocą .unitypackage
lub menedżera pakietów Unity
- Sprawdź folder
Assets/
i menedżera pakietów Unity, aby upewnić się, że pakiety SDK Firebase i EDM4U zostały zainstalowane wyłącznie za pomocą jednej lub drugiej metody. - Niektóre wtyczki opracowane przez Google, np. Google Play, oraz wtyczki innych firm mogą zależeć od standardu EDM4U. Te wtyczki mogą zawierać EDM4U w pakietach
.unitypackage
lub w pakietach menedżera pakietów Unity (UPM). Upewnij się, że w projekcie jest tylko 1 kopia EDM4U. Jeśli któreś pakiety UPM zależą od EDM4U, najlepiej zachować tylko wersje UPM tej platformy, które znajdziesz na stronie archiwum interfejsów API Google dla Unity.
Upewnij się, że wszystkie usługi Firebase w Twoim projekcie są tej samej wersji.
- Jeśli pakiety SDK Firebase zostały zainstalowane za pomocą
.unitypackage
, sprawdź, czy wszystkie bibliotekiFirebaseCppApp
w folderzeAssets/Firebase/Plugins/x86_64/
są tej samej wersji. - Jeśli pakiety SDK Firebase zostały zainstalowane przy użyciu menedżera pakietów Unity (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, tym razem z tymi samymi wersjami. Najlepszym sposobem jest usunięcie wszystkich pakietów Firebase za pomocą metod opisanych w tej sekcji dotyczącej migracji.
Błędy kompilacji urządzenia docelowego i rozwiązania
Jeśli gra działa w edytorze (skonfigurowanym pod kątem wybranego docelowego typu kompilacji), sprawdź, czy zewnętrzny menedżer zależności dla Unity (EDM4U) jest prawidłowo skonfigurowany i działa.
Repozytorium EDM4U na GitHub zawiera przewodnik krok po kroku dotyczący tej części procesu, który należy sprawdzić i zastosować przed kontynuacją.
Problemy z „Single Dex” i skompresowaniem (obowiązkowe w przypadku korzystania z Cloud Firestore)
Podczas tworzenia aplikacji na Androida możesz napotkać błąd kompilacji związany z pojedynczym plikiem .dex. Komunikat o błędzie wygląda podobnie do tego (jeśli projekt jest skonfigurowany pod kątem 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 w przypadku aplikacji na Androida. Jeden plik .dex może odnosić się do 65 536 metod. Kompilacje nie będą działać,jeśli łączna liczba metod ze wszystkich bibliotek Androida w Twoim projekcie przekroczy ten limit.
Te 2 kroki można stosować po kolei. Włącz Multidex tylko wtedy, gdy minifikacja nie rozwiąże problemu.
Włącz minifikację
W wersji 2017.2 Unity wprowadziło skompresowanie, aby usuwać nieużywany kod, co może zmniejszyć łączną liczbę metod, do których odwołują się odwołania w pojedynczym pliku dex. * Opcję znajdziesz w sekcji Ustawienia odtwarzacza > Android > Ustawienia publikacji > Kompresowanie. * Opcje mogą się różnić w zależności od wersji Unity, więc zapoznaj się z oficjalną dokumentacją Unity.
Włącz Multidex
Jeśli po włączeniu kompresji liczba odwołań do metod nadal przekracza limit, możesz też włączyć multidex
. Można to zrobić na kilka sposobów:
- Jeśli w sekcji Ustawienia gracza włączona jest opcja Niestandardowy szablon Gradle, zmień wartość parametru
mainTemplate.gradle
. - Jeśli do wyeksportowania projektu używasz Android Studio, zmodyfikuj plik build.gradle na poziomie modułu.
Więcej informacji znajdziesz w przewodniku użytkownika Multi-X.
Rozwiązywanie błędów czasu wykonywania na urządzeniu docelowym
Jeśli Twoja gra działa w edytorze i można ją skompilować oraz zainstalować na urządzeniu docelowym, ale w czasie działania występują błędy, przejrzyj i zbadaj logi wygenerowane na urządzeniu.
Z tej sekcji dowiesz się, jak analizować dzienniki pod kątem potencjalnych błędów. Jeden z takich błędów występuje tylko w czasie działania na urządzeniu lub symulatorze.
Android
Symulator
- Sprawdź logi wyświetlane w konsoli emulatora lub otwórz okno Logcat.
Urządzenie
Zapoznaj się z narzędziami adb i adb logcat oraz sposobami ich używania.
- Do filtrowania danych wyjściowych możesz użyć różnych narzędzi środowiska wiersza poleceń, ale możesz też skorzystać z opcji logcata.
Prosty sposób na rozpoczęcie sesji ADB z czystą kartą:
adb logcat -c && adb logcat <OPTIONS>
gdzie
OPTIONS
to flagi podane w wierszu poleceń w celu filtrowania danych wyjściowych.
Korzystanie z LogCat w Android Studio
Gdy używasz narzędzia Logcat w Android Studio, dostępne są dodatkowe narzędzia wyszukiwania, które ułatwiają wyszukiwanie.
iOS
Sprawdzanie logów
Jeśli używasz urządzenia fizycznego, podłącz je do komputera. Sprawdź lldb w Xcode.
Problemy z Swift
Jeśli w logach błędów znajdziesz wzmianki o swift, zapoznaj się z sekcją Menedżer zewnętrznych zależności w Unity.
Dalsze kroki
Jeśli w Twojej grze nadal występują problemy związane z Firebase, poszukaj informacji na stronie z problemami z pakietem SDK Firebase dla Unity i rozważ zgłoszenie nowego problemu. Dodatkowe opcje znajdziesz na stronie pomocy Firebase.