Debugowanie procesu budowania, instalowania i uruchamiania gry

Wstęp

Poniżej znajduje się przewodnik dotyczący debugowania procesu kompilacji i budowania gier Unity przy użyciu zestawu Firebase SDK for Unity. Opisuje, jak zbadać i rozwiązać wiele typowych problemów, które można napotkać podczas konfigurowania i tworzenia gry na nową platformę lub po aktualizacji. Jest uporządkowany według tego, kiedy te błędy mogą wystąpić w procesie. Zapoznaj się z nimi w kolejności i kontynuuj, gdy każdy zostanie rozwiązany.

Oprócz tego dokumentu zapoznaj się z często zadawanymi pytaniami dotyczącymi Firebase for Unity, aby uzyskać więcej informacji.

Problemy z kompilacją trybu Play

Pierwsza klasa 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 i podczas trybu Play.

Gdy Unity uruchomi się lub wykryje zmiany w zależnościach, kodzie lub innych zasobach, spróbuje odbudować projekt. Jeśli projekt nie może się skompilować w tym czasie, edytor zarejestruje błędy kompilacji w konsoli, a jeśli spróbujesz wejść w tryb odtwarzania, w zakładce Scena Unity pojawi się wyskakujące okienko z komunikatem All compiler errors have to be fixed before you can enter playmode! .

Brakujące typy, klasy, metody i składowe

Wiele problemów z Firebase wynika z niemożności znalezienia przez edytor i kompilator niezbędnych typów, klas, metod i członków. Typowymi objawami tego są warianty następujących czynności:

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>'

Kroki rozwiązania:
  1. Jeśli używasz klas lub metod Firebase w kodzie, upewnij się, że je udostępniasz, mając odpowiednie dyrektywy using dla poszczególnych potrzebnych produktów Firebase.

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

    1. Aby zaimportować odpowiednie pakiety:
      1. Dodaj Firebase Unity SDK jako .unitypackage s lub
      2. Przyjrzyj się i wykonaj jedną z alternatyw opisanych w opcjach instalacji modułu dodatkowego .
    2. Upewnij się, że każdy produkt Firebase w Twoim projekcie i EDM4U :
      • Są w tej samej wersji
      • Zostały zainstalowane wyłącznie jako .unitypackage LUB wyłącznie za pośrednictwem Menedżera pakietów Unity.
  3. Jeśli zaimportowałeś pakiet Firebase Unity SDK przed wersją „10.0.0” jako .unitypackage s, archiwum ZIP 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 platformy .NET Framework:

    1. Zgodność między wersjami Unity Editor i .NET Frameworks Poziomy są omówione w artykule Dodawanie Firebase do projektu Unity .
    2. Jeśli przypadkowo zaimportowałeś pakiety Firebase na niewłaściwym poziomie .NET Framework lub musisz przełączyć się z używania .unitypackage s na jedną z opcji instalacji Dodatkowa jednostka Unity , najczystszym sposobem jest usunięcie każdego pakietu Firebase za pomocą metod wymienionych w tej sekcji migracji i następnie ponownie zaimportuj wszystkie pakiety Firebase.
  4. Sprawdź, czy Twój edytor przebudowuje Twój projekt i czy Twoje próby odtwarzania odzwierciedlają najbardziej aktualny stan Twojego projektu:

    1. Domyślnie edytor Unity jest ustawiony na przebudowę po każdym wykryciu zmian zasobów lub konfiguracji.
    2. Możliwe, że ta funkcja została wyłączona i że Unity Editor jest ustawiony na ręczne odświeżanie/rekompilację . Zbadaj to i spróbuj ręcznie odświeżyć, jeśli tak jest.

Błędy uruchomieniowe trybu Play

Jeśli Twoja gra uruchamia się, ale podczas działania występują problemy z Firebase, wypróbuj te rozwiązania:

Upewnij się, że zatwierdzasz pakiety Firebase w sekcji „Bezpieczeństwo i prywatność” w systemie Mac OS

Jeśli podczas uruchamiania gry w edytorze w systemie Mac OS zostanie wyświetlone okno dialogowe „FirebaseCppApp-<wersja>.bundle Nie można otworzyć, ponieważ nie można zweryfikować programisty”, musisz zatwierdzić ten konkretny plik pakietu w Menu Bezpieczeństwo i prywatność Maca.

Aby to zrobić, kliknij ikonę Apple > Preferencje systemowe > Bezpieczeństwo i prywatność

W menu zabezpieczeń, mniej więcej w połowie strony, znajduje się sekcja z informacją „FirebaseCppApp-<wersja>.bundle” została zablokowana, ponieważ nie pochodzi od zidentyfikowanego programisty”.

Kliknij przycisk oznaczony Mimo to zezwalaj .

c35166e224cce720.png

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

Zobaczysz ostrzeżenie podobne do pierwszego:

5ad9ddb0d3a52892.png

Naciśnij Otwórz , a twój program będzie mógł kontynuować; nie będziesz więcej pytany o ten konkretny plik.

Upewnij się, że Twój projekt zawiera prawidłowe pliki konfiguracyjne i używa ich

  1. Upewnij się, że ustawienia kompilacji są ustawione dla zamierzonego celu (iOS lub Android) w Plik > Ustawienia kompilacji . Aby uzyskać pełniejszą dyskusję, przeczytaj dokumentację ustawień Unity Build .
  2. Pobierz plik konfiguracyjny dla swojej aplikacji ( google-services.json na Androida lub GoogleService-Info.plist na iOS) i zbuduj cel z konsoli Firebase w Ustawieniach projektu > Twoje aplikacje : Jeśli masz już te pliki, usuń je ze swojego projektu i zastąp je najnowszą wersją, upewniając się, że ich pisownia jest dokładnie taka, jak pokazano powyżej, bez „(1)” lub innych cyfr dołączonych do nazw plików.
  3. Jeśli konsola zawiera komunikat dotyczący plików w Assets/StreamingAssets/ , upewnij się, że nie ma komunikatów konsoli mówiących, że Unity nie może tam edytować plików
  4. Upewnij się, że Assets/StreamingAssets/google-services-desktop.json został wygenerowany i pasuje do pobranego pliku konfiguracyjnego.
    • Jeśli nie jest generowany automatycznie i StreamingAssets/ nie istnieje, ręcznie utwórz katalog w katalogu Assets .
    • Sprawdź, czy Unity wygenerowało teraz google-services-desktop.json .

Upewnij się, że każdy produkt Firebase i EDM4U zostały zainstalowane wyłącznie za pośrednictwem .unitypackage lub Unity Package Manager

  1. Sprawdź zarówno folder Assets/ jak i Unity Package Manager, aby upewnić się, że zestawy SDK Firebase i EDM4U zostały zainstalowane wyłącznie za pomocą jednej lub drugiej metody.
  2. 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 swoich pakietach .unitypackage lub Unity Package Manager (UPM). Upewnij się, że w twoim projekcie jest tylko jedna kopia EDM4U. Jeśli jakiekolwiek pakiety UPM zależą od EDM4U, najlepiej jest zachować tylko wersje UPM EDM4U, które można znaleźć na stronie Google APIs for Unity Archive .

Upewnij się, że każdy produkt Firebase w Twoim projekcie jest w tej samej wersji.

  1. Jeśli pakiety Firebase SDK zostały zainstalowane za pomocą .unitypackage , sprawdź, czy wszystkie biblioteki FirebaseCppApp w obszarze Assets/Firebase/Plugins/x86_64/ mają tę samą wersję.
  2. Jeśli zestawy SDK Firebase zostały zainstalowane za pomocą Unity Package Manager (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 Firebase, tym razem z tymi samymi wersjami. Najczystszym sposobem jest usunięcie każdego pakietu Firebase za pomocą metod wymienionych w tej sekcji dotyczącej migracji .

Błędy kompilacji programu rozpoznawania nazw i urządzenia docelowego

Jeśli Twoja gra działa w edytorze (skonfigurowanym dla wybranego celu kompilacji), następnie sprawdź, czy Menedżer zależności zewnętrznych dla Unity (EDM4U) jest poprawnie skonfigurowany i działa.

Repozytorium EDM4U GitHub zawiera przewodnik krok po kroku dotyczący tej części procesu, który należy przejrzeć i wykonać przed kontynuowaniem.

Problemy i minifikacje „Single Dex” ( obowiązkowe w przypadku korzystania z Cloud Firestore)

Podczas tworzenia aplikacji na Androida możesz napotkać błąd kompilacji związany z posiadaniem jednego pliku dex. Komunikat o błędzie wygląda podobnie do następującego (jeśli twój 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 dla aplikacji na Androida. Pojedynczy plik dex jest ograniczony do odniesienia do 65 536 metod; kompilacje zakończą się niepowodzeniem, jeśli łączna liczba metod ze wszystkich bibliotek Androida w twoim projekcie przekroczy ten limit.

Następujące dwa kroki można zastosować sekwencyjnie; włączaj multidex tylko wtedy, gdy minifikacja nie rozwiąże problemu.

Włącz minifikację

Unity wprowadził Minifikację w 2017.2, aby usunąć nieużywany kod, co może zmniejszyć całkowitą liczbę przywoływanych metod w jednym pliku dex. * Opcję można znaleźć w Ustawieniach odtwarzacza > Android > Ustawienia publikowania > Minify . * Opcje mogą się różnić w różnych wersjach Unity, więc zapoznaj się z oficjalną dokumentacją Unity.

Włącz Multidex

Jeśli po włączeniu minifikacji liczba przywoływanych metod nadal przekracza limit, inną opcją jest włączenie multidex . Istnieje wiele sposobów osiągnięcia tego w Unity:

  • Jeśli niestandardowy szablon ocen w ustawieniach odtwarzacza jest włączony, zmodyfikuj mainTemplate.gradle .
  • Jeśli do skompilowania wyeksportowanego projektu używasz Android Studio, zmodyfikuj plik build.gradle na poziomie modułu.

Więcej szczegółów można znaleźć w instrukcji obsługi multidexu .

Zrozumienie i naprawa błędów wykonawczych urządzenia docelowego

Jeśli Twoja gra działa w edytorze i można ją zbudować i zainstalować na urządzeniu docelowym, ale napotykasz błędy w czasie wykonywania, sprawdź i zbadaj dzienniki wygenerowane na urządzeniu .

W tej sekcji opisano sposób sprawdzania dzienników pod kątem możliwych błędów i jednego takiego błędu, który występuje tylko w czasie wykonywania na urządzeniu lub symulatorze.

Android

Symulator

  • Sprawdź logi wyświetlane w konsoli emulatora lub przejrzyj okno Logcat .

Urządzenie

Zapoznaj się z adb i adb logcat oraz jak z nich korzystać.

  • Chociaż możesz użyć różnych narzędzi środowiska wiersza poleceń do filtrowania danych wyjściowych, rozważ alternatywne spojrzenie na opcje programu logcat.
  • Prostym sposobem na rozpoczęcie sesji ADB z czystym kontem jest:

    adb logcat -c && adb logcat <OPTIONS>
    

    gdzie OPTIONS to dowolne flagi, które przekazujesz w wierszu poleceń, aby przefiltrować dane wyjściowe.

Korzystanie z Logcat przez Android Studio

Podczas korzystania z Logcat za pośrednictwem Android Studio dostępne są dodatkowe narzędzia wyszukiwania , które ułatwiają generowanie produktywnych wyszukiwań.

iOS

Inspekcja dzienników

Jeśli korzystasz z urządzenia fizycznego, podłącz je do komputera. Sprawdź lldb w Xcode.

Szybkie problemy

Jeśli napotkasz dzienniki błędów wspominające o Swift, zapoznaj się z sekcją External Dependency Manager for Unity dotyczącą ich.

Dalsze kroki

Jeśli w Twojej grze nadal występują problemy z kompilacją, tworzeniem lub uruchamianiem związane z Firebase, przejrzyj stronę problemów z Firebase SDK for Unity i rozważ zgłoszenie nowego problemu. Ponadto zapoznaj się ze stroną wsparcia Firebase, aby dowiedzieć się więcej o dodatkowych opcjach.