Wprowadzenie
Poniżej znajdziesz przewodnik po debugowaniu procesu kompilacji i tworzenia gier na Unity przy użyciu pakietu SDK Firebase dla Unity. Przewodnik ten zawiera opis sposobów analizowania i rozwiązywania wielu najczęstszych problemów, które mogą wystąpić podczas konfigurowania i tworzenia gry na nową platformę lub po jej aktualizacji. Są one uporządkowane według tego, kiedy mogą wystąpić w procesie. 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ądzenia mobilne. 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
.unitypackage
lub - Zapoznaj się z dodatkowymi opcjami instalacji Unity i wybierz jedną z nich.
- Dodaj pakiet SDK Firebase Unity jako
- 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 pakiet Firebase Unity SDK został zaimportowany jako
.unitypackage
sprzed wersji „10.0.0”, 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 przez przypadek zaimportowałeś/zaimportowałaś pakiety Firebase na nieprawidłowym poziomie .NET Framework lub musisz zmienić
.unitypackage
na jedną z dodatkowych opcji instalacji Unity, najprostszym sposobem jest usunięcie wszystkich pakietów Firebase za pomocą metod wymienionych 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. Sprawdź to i spróbuj odświeżyć stronę ręcznie.
Błędy w trybie odtwarzania
Jeśli gra się uruchamia, ale podczas działania ma problemy z Firebase, wykonaj te czynności:
Sprawdź, czy pakiety Firebase są zatwierdzone w sekcji „Ochrona i prywatność” w systemie operacyjnym Mac.
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.
Wróć do Unity i jeszcze raz naciśnij Odtwórz.
Zobaczysz wtedy ostrzeżenie podobne do pierwszego:
Naciśnij Otwórz, a program będzie mógł kontynuować. Nie zostaniesz ponownie zapytany o ten 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). Więcej informacji znajdziesz w dokumentacji dotyczącej ustawień kompilacji w Unity.
- Pobierz plik konfiguracji aplikacji (
google-services.json
w przypadku Androida lubGoogleService-Info.plist
w przypadku iOS) oraz utwórz wersję do kompilacji w konsoli Firebase w sekcji Ustawienia projektu > Twoje aplikacje: Jeśli te pliki są już w Twoim projekcie, usuń je i zastąp je najnowszą wersją. Upewnij się, że ich nazwy są zapisane dokładnie tak, jak podano powyżej, bez „(1)” ani innych numeró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
Assets/StreamingAssets/google-services-desktop.json
jest wygenerowany i zgodny z pobranym plikiem konfiguracji.- 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
Upewnij się, że 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 tylko za pomocą jednej z tych metod. - 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 pakietach
.unitypackage
lub w pakietach menedżera pakietów Unity (UPM). Upewnij się, że w projekcie jest tylko 1 kopia EDM4U. Jeśli jakiekolwiek pakiety UPM są zależne od EDM4U, najlepiej zachować tylko wersje UPM EDM4U, które można znaleźć na stronie interfejsów Google API dla Unity Archive.
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 za pomocą 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 ich całkowite usunięcie, a następnie ponowne zainstalowanie, tym razem w tych samych wersjach. Najlepszym sposobem jest usunięcie wszystkich pakietów Firebase za pomocą metod opisanych w tej sekcji dotyczącej migracji.
Błędy kompilacji rozwiązywania i urządzenia docelowego
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 kompilowania aplikacji na Androida możesz napotkać błąd kompilacji związany z tym, że masz tylko 1 plik dex. Komunikat o błędzie wygląda podobnie do tego (jeśli 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 w przypadku aplikacji na Androida. Jeden plik dex może zawierać odwołania do 65 536 metod. Kompilacja zakończy się niepowodzeniem,jeśli łączna liczba metod ze wszystkich bibliotek Androida w projekcie przekroczy ten limit.
Te 2 podpunkty możesz wykonywać po kolei. Włącz multideks tylko wtedy, gdy uproszczenie nie rozwiąże problemu.
Włącz kompresję
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ę tę znajdziesz w sekcji Ustawienia odtwarzacza > Android > Ustawienia publikacji > Kompresowanie. * Opcje mogą się różnić w zależności od wersji Unity, dlatego 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 gra działa w edytorze i może być skompilowana oraz zainstalowana na urządzeniu docelowym, ale występują błędy w czasie wykonywania, sprawdź logi wygenerowane na urządzeniu.
W tej sekcji znajdziesz szczegółowe informacje o tym, jak sprawdzić logi pod kątem możliwych błędów i jednego błędu, który występuje tylko w czasie działania na urządzeniu lub w symulacji.
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 sposobem 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, które przekazujesz wierszowi poleceń, aby filtrować dane wyjściowe.
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 z kompilacją, tworzeniem lub uruchamianiem związane z Firebase, zapoznaj się z stroną z problemami pakietu Firebase SDK dla Unity i rozważ zgłoszenie nowego problemu. Dodatkowe opcje znajdziesz na stronie pomocy Firebase.