Debugowanie procesu tworzenia, instalowania i uruchamiania gier

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!.

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:
  1. 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.

    1. Przykłady z gry MechaHamster: Level Up With Firebase Edition:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. Sprawdź, czy zaimportowano odpowiednie pakiety Firebase:

    1. Aby zaimportować odpowiednie pakiety:
      1. Dodaj pakiet SDK Firebase Unity jako pakiety .unitypackage lub
      2. Zapoznaj się z dodatkowymi opcjami instalacji Unity i wybierz jedną z nich.
    2. 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;
  3. 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:

    1. Zgodność między wersjami poziomu Unity Editor i poziomów frameworków .NET jest omawiana w artykule Dodawanie Firebase do projektu Unity.
    2. 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.
  4. Sprawdź, czy edytor ponownie tworzy projekt i czy próby odtworzenia odzwierciedlają jego najnowszy stan:

    1. Domyślnie edytor Unity jest skonfigurowany tak, aby odtwarzać zasoby lub konfigurację za każdym razem, gdy zostaną wykryte zmiany.
    2. 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.

c35166e224cce720.png

Wróć do Unity i ponownie naciśnij Play.

Zobaczysz wtedy ostrzeżenie podobne do pierwszego:

5ad9ddb0d3a52892.png

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.

  1. 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).
  2. Pobierz plik konfiguracyjny aplikacji (google-services.json w przypadku Androida lub GoogleService-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.
  3. 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.
  4. 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 katalogu Assets.
    • Sprawdź, czy Unity wygenerowało google-services-desktop.json.

Sprawdź, czy wszystkie usługi Firebase i EDM4U zostały zainstalowane wyłącznie za pomocą .unitypackage lub menedżera pakietów Unity

  1. 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.
  2. 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.

  1. Jeśli pakiety SDK Firebase zostały zainstalowane za pomocą .unitypackage, sprawdź, czy wszystkie biblioteki FirebaseCppApp w folderze Assets/Firebase/Plugins/x86_64/ są tej samej wersji.
  2. 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ę.
  3. 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.