Wprowadzenie
Poniżej znajdziesz przewodnik po debugowaniu procesu kompilacji i tworzenia gier w 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. Konsultuj się z nimi po kolei i rozwijaj problemy w miarę ich rozwiązywania.
Więcej informacji znajdziesz w najczęstszych pytaniach dotyczących Firebase dla Unity.
Problemy z kompilacjami trybu Play
Podczas testowania w edytorze przed rozpoczęciem kompilacji na urządzenia mobilne mogą wystąpić problemy z pierwszą klasą. 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 utworzyć projekt. Jeśli w tym czasie nie uda się skompilować projektu, edytor zapisze w konsoli błędy kompilacji, a jeśli spróbujesz włączyć tryb Play, na karcie Scene w Unity pojawi się wyskakujące okienko o błędzie z tekstem 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 projekt obejmuje tylko zgodny poziom .NET Framework:- Zgodność wersji edytora Unity i poziomów .NET Frameworks opisano 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 odbudowuje projekt i czy próby odtworzenia filmu odzwierciedlają jego aktualny 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 działania trybu Play
Jeśli gra się uruchamia, ale podczas działania występują problemy z Firebase, wypróbuj te rozwiązania:
Pamiętaj, aby zatwierdzić pakiety Firebase w sekcji „Bezpieczeństwo „Prywatność” w systemie Mac OS
Jeśli po uruchomieniu gry w edytorze w systemie macOS zobaczysz okno z komunikatem „FirebaseCppApp-<wersja>.pakietu Nie można otworzyć, ponieważ nie można zweryfikować dewelopera”. Musisz zatwierdzić konkretny plik pakietu na Macach. Menu prywatności.
Aby to zrobić, kliknij Ikona Apple > Preferencje systemowe > Ochrona i prywatność.
W menu zabezpieczeń mniej więcej w połowie strony znajduje się sekcja z napisem „FirebaseCppApp-<version>.bundle” Aplikacja została zablokowana, ponieważ nie pochodzi 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 zostaniesz ponownie zapytany o ten plik.
Sprawdź, czy projekt zawiera prawidłowe pliki konfiguracji i korzysta z nich
- W sekcji Plik > Ustawienia kompilacji sprawdź, czy ustawienia kompilacji są ustawione pod kątem docelowego systemu operacyjnego (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) i utwórz wersję do kompilacji w konsoli Firebase w sekcji Ustawienia projektu > Twoje aplikacje: Jeśli masz już te pliki, usuń je ze swojego projektu i zastąp je najnowszą wersją. Upewnij się, że ich nazwy są zapisane dokładnie tak, jak pokazano 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 Unity Package Manager (UPM). Upewnij się, że w projekcie jest tylko 1 kopia EDM4U. Jeśli jakiekolwiek 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 pakiecieAssets/Firebase/Plugins/x86_64/
są w 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 ich całkowite usunięcie, a następnie ponowną instalację, tym razem z tymi samymi wersjami. Najprostszym sposobem jest usunięcie każdego pakietu 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 menedżer zależności zewnętrznych w Unity (EDM4U) jest prawidłowo skonfigurowany i działa.
Repozytorium EDM4U na GitHubie zawiera przewodnik krok po kroku dotyczący tej części procesu, który należy sprawdzić i zastosować przed kontynuacją.
'single Dex' problemy i minifikację (wymagane, jeśli korzystasz 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 dotyczących 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 czynności możesz wykonywać kolejno. Włącz multideks tylko wtedy, gdy uproszczenie nie rozwiąże problemu.
Włącz minifikację
W 2017 r.wprowadziliśmy w Unity minifikację, aby pozbyć się nieużywanego kodu, co może zmniejszyć łączną liczbę odwołań do metod w jednym 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 minifikacji liczba przywołanych metod nadal przekracza limit, możesz 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 można znaleźć w przewodniku użytkownika multidex.
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.
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 sposobami ich używania.
- Chociaż dane wyjściowe możesz filtrować za pomocą różnych narzędzi dostępnych w środowisku wiersza poleceń, możesz też skorzystać z opcji narzędzia logcat.
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 korzystasz z urządzenia fizycznego, podłącz je do komputera. Sprawdź lldb w Xcode.
Problemy 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. Informacje o dodatkowych opcjach znajdziesz też na stronie pomocy Firebase.