Wprowadzenie
Poniżej znajdziesz przewodnik po debugowaniu procesu kompilacji i tworzenia gier Unity za pomocą pakietu SDK Firebase dla Unity. Opisujemy w nim, jak analizować i rozwiązywać wiele typowych problemów, które mogą wystąpić podczas konfigurowania i tworzenia gry na nową platformę lub po aktualizacji. Są one uporządkowane według kolejności, w jakiej mogą wystąpić w procesie. Sprawdzaj je po kolei i przechodź do kolejnych, gdy rozwiążesz poprzednie.
Oprócz tego dokumentu zapoznaj się też z najczęstszymi pytaniami dotyczącymi Firebase dla Unity.
Problemy z kompilacją w trybie odtwarzania
Pierwsza kategoria 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 trybem odtwarzania i w jego trakcie.
Gdy Unity uruchomi się lub wykryje zmiany w zależnościach, kodzie lub innych zasobach, spróbuje ponownie skompilować projekt. Jeśli w tym momencie nie uda się skompilować projektu, edytor zarejestruje błędy kompilacji w konsoli, a jeśli spróbujesz wejść w tryb 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 wynika z tego, że edytor i kompilator nie mogą znaleźć niezbędnych typów, klas, metod i elementów. Typowe objawy to warianty tych komunikatów:
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:
Jeśli używasz klas lub metod Firebase w kodzie, upewnij się, że są one dostępne, stosując odpowiednie dyrektywy
usingdla konkretnych usług Firebase.Sprawdź, czy zostały zaimportowane odpowiednie pakiety Firebase:
- Aby zaimportować odpowiednie pakiety:
- Dodaj pakiet Firebase Unity SDK jako
.unitypackages lub - Zapoznaj się z jedną z alternatywnych opcji w sekcji Dodatkowe opcje instalacji Unity i wykonaj odpowiednie czynności.
- Dodaj pakiet Firebase Unity SDK jako
- Upewnij się, że każda usługa Firebase w projekcie i EDM4U:
- mają tę samą wersję,
- zostały zainstalowane wyłącznie jako
.unitypackageLUB wyłącznie za pomocą menedżera pakietów Unity.
- Aby zaimportować odpowiednie pakiety:
Jeśli pakiet Firebase Unity SDK został zaimportowany przed wersją „10.0.0” jako
.unitypackage, plik ZIP pakietu 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 .NET Framework:- Zgodność wersji edytora Unity i poziomów .NET Framework została omówiona w artykule Dodawanie Firebase do projektu Unity.
- Jeśli pakiety Firebase zostały przypadkowo zaimportowane na nieprawidłowym poziomie .NET Framework lub chcesz przejść z
.unitypackagena jedną z dodatkowych opcji instalacji Unity, najlepiej usunąć wszystkie pakiety Firebase za pomocą metod wymienionych w tej sekcji dotyczącej migracji, a następnie ponownie zaimportować wszystkie pakiety Firebase.
Sprawdź, czy edytor przebudowuje projekt i czy próby odtworzenia odzwierciedlają najbardziej aktualny stan projektu:
- Domyślnie edytor Unity jest ustawiony tak, aby ponownie kompilować projekt za każdym razem, gdy wykryje zmiany w komponentach lub konfiguracji.
- Możliwe, że ta funkcja została wyłączona, a edytor Unity jest ustawiony na ręczne odświeżanie/rekompilowanie. Sprawdź, czy tak jest, i w razie potrzeby odśwież ręcznie.
Błędy środowiska wykonawczego w trybie odtwarzania
Jeśli gra się uruchamia, ale podczas działania występują problemy z Firebase, wykonaj te czynności:
Zatwierdź pakiety Firebase w sekcji „Bezpieczeństwo i prywatność” w systemie Mac OS.
Jeśli po uruchomieniu gry w edytorze w systemie Mac OS pojawi się okno z komunikatem „Nie można otworzyć pliku FirebaseCppApp-<wersja>.bundle, ponieważ nie można zweryfikować dewelopera”, musisz zatwierdzić ten plik pakietu w menu Bezpieczeństwo i prywatność na Macu.
Aby to zrobić, kliknij ikonę Apple > Preferencje systemowe > Ochrona i prywatność.
W menu zabezpieczeń, mniej więcej w połowie strony, znajduje się sekcja z informacją, że pakiet „FirebaseCppApp-<wersja>.bundle” został zablokowany, ponieważ nie pochodzi od zidentyfikowanego dewelopera.
Kliknij przycisk Zezwól mimo to.

Wróć do Unity i ponownie naciśnij Play (Graj).
Zobaczysz wtedy ostrzeżenie podobne do pierwszego:

Kliknij Otwórz, aby kontynuować. Nie zobaczysz już więcej pytania o ten plik.
Sprawdź, czy projekt zawiera prawidłowe pliki konfiguracji i czy ich używa.
- Upewnij się, że ustawienia kompilacji są skonfigurowane pod kątem docelowego systemu (iOS lub Android) w sekcji File > Build Settings (Plik > Ustawienia kompilacji). Więcej informacji znajdziesz w dokumentacji ustawień kompilacji Unity.
- Pobierz plik konfiguracji aplikacji (
google-services.jsonna Androida lubGoogleService-Info.plistna iOS) i cel kompilacji z konsoli Firebase, wybierając Ustawienia projektu > Twoje aplikacje. Jeśli masz już te pliki, usuń je z projektu i zastąp najnowszą wersją. Upewnij się, że ich nazwy są zapisane dokładnie tak, jak powyżej, bez „(1)” ani innych cyfr. - Jeśli konsola zawiera komunikat dotyczący plików w
Assets/StreamingAssets/, upewnij się, że nie ma w niej komunikatów o tym, że Unity nie może edytować plików w tym miejscu. - Upewnij się, że plik
Assets/StreamingAssets/google-services-desktop.jsonzostał wygenerowany i jest zgodny z pobranym plikiem konfiguracji.- Jeśli nie zostanie on wygenerowany automatycznie i nie ma katalogu
StreamingAssets/, utwórz go ręcznie w kataloguAssets. - Sprawdź, czy Unity wygenerował teraz plik
google-services-desktop.json.
- Jeśli nie zostanie on wygenerowany automatycznie i nie ma katalogu
Upewnij się, że wszystkie usługi Firebase i EDM4U zostały zainstalowane wyłącznie za pomocą .unitypackage lub Menedżera pakietów Unity.
- Sprawdź zarówno folder
Assets/, jak 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
.unitypackagelub Unity Package Manager (UPM). Upewnij się, że w projekcie jest tylko 1 kopia EDM4U. Jeśli jakieś pakiety UPM zależą od EDM4U, najlepiej zachować tylko wersje UPM EDM4U, które można znaleźć na stronie archiwum interfejsów API Google dla Unity.
Upewnij się, że każda usługa Firebase w projekcie jest w tej samej wersji.
- Jeśli pakiety SDK Firebase zostały zainstalowane za pomocą
.unitypackage, sprawdź, czy wszystkie bibliotekiFirebaseCppAppwAssets/Firebase/Plugins/x86_64/są w tej samej wersji. - Jeśli pakiety SDK Firebase zostały zainstalowane za pomocą Unity Package Manager (UPM), otwórz Windows > Package Manager, wyszukaj „Firebase” i upewnij się, że wszystkie pakiety Firebase są w tej samej wersji.
- Jeśli Twój projekt zawiera różne wersje pakietów SDK Firebase, zalecamy całkowite usunięcie wszystkich pakietów SDK Firebase przed ich ponowną instalacją, 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 w programie do rozwiązywania problemów i na urządzeniu docelowym
Jeśli gra działa w edytorze (skonfigurowanym dla wybranego przez Ciebie odpowiedniego celu kompilacji), sprawdź, czy External Dependency Manager for Unity (EDM4U) jest prawidłowo skonfigurowany i działa.
Repozytorium EDM4U na GitHubie zawiera szczegółowy przewodnik po tej części procesu, z którym należy się zapoznać i którego należy przestrzegać przed przejściem dalej.
Problemy z pojedynczym plikiem Dex i minifikacja (obowiązkowe, jeśli używasz Cloud Firestore)
Podczas tworzenia aplikacji na Androida może wystąpić błąd kompilacji związany z posiadaniem pojedynczego pliku 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 dodatkowych aplikacji na Androida. Pojedynczy plik dex może odwoływać się do maksymalnie 65 536 metod. Kompilacje nie powiodą się,jeśli łączna liczba metod ze wszystkich bibliotek Androida w projekcie przekroczy ten limit.
Możesz wykonać te 2 czynności po kolei. Włącz multidex tylko wtedy, gdy minifikacja nie rozwiąże problemu.
Włącz minifikację
W 2017.2 roku Unity wprowadziło minifikację, która usuwa nieużywany kod, co może zmniejszyć łączną liczbę metod, do których odwołuje się pojedynczy plik dex. * Tę opcję znajdziesz w sekcji Player Settings > Android > Publishing Settings > Minify (Ustawienia odtwarzacza > Android > Ustawienia publikowania > Minifikacja). * Opcje mogą się różnić w zależności od wersji Unity, dlatego zapoznaj się z oficjalną dokumentacją Unity.
Włączanie multidex
Jeśli po włączeniu minifikacji liczba metod, do których się odwołujesz, nadal przekracza limit, możesz włączyć multidex. W Unity można to zrobić na kilka sposobów:
- Jeśli w sekcji Ustawienia odtwarzacza włączona jest opcja Niestandardowy szablon Gradle, zmodyfikuj plik
mainTemplate.gradle. - Jeśli do tworzenia wyeksportowanego projektu używasz Android Studio, zmodyfikuj plik build.gradle na poziomie modułu.
Więcej informacji znajdziesz w przewodniku użytkownika multidex.
Interpretowanie i rozwiązywanie błędów środowiska wykonawczego na urządzeniu docelowym
Jeśli gra działa w edytorze i można ją skompilować oraz zainstalować na urządzeniu docelowym, ale występują błędy środowiska wykonawczego, sprawdź i przeanalizuj dzienniki wygenerowane na urządzeniu.
W tej sekcji opisujemy, jak sprawdzić logi pod kątem możliwych błędów i jednego z błędów, który występuje tylko w czasie działania na urządzeniu lub w symulatorze.
Android
Symulator
- Sprawdź logi wyświetlane w konsoli emulatora lub wyświetl 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żywać różnych narzędzi środowiska wiersza poleceń, ale możesz też zapoznać się z opcjami logcat.
Prostym sposobem na rozpoczęcie sesji ADB od zera jest:
adb logcat -c && adb logcat <OPTIONS>gdzie
OPTIONSto flagi przekazywane do wiersza poleceń w celu filtrowania danych wyjściowych.
Korzystanie z Logcata w Android Studio
Podczas korzystania z Logcata w Android Studio dostępne są dodatkowe narzędzia wyszukiwania, które ułatwiają generowanie skutecznych wyszukiwań.
iOS
Przeglądanie logów
Jeśli używasz urządzenia fizycznego, podłącz je do komputera. Sprawdź lldb w Xcode.
Problemy ze Swiftem
Jeśli napotkasz dzienniki błędów dotyczące Swift, zapoznaj się z sekcją External Dependency Manager for Unity.
Dalsze kroki
Jeśli nadal występują problemy z kompilacją, kompilowaniem lub uruchamianiem gry związane z Firebase, zapoznaj się ze stroną z problemami z pakietem SDK Firebase dla Unity i rozważ zgłoszenie nowego problemu. Dodatkowe opcje znajdziesz na stronie pomocy Firebase.