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. 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 mobilnej. 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żnych komponentach, 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 .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 za pomocą menedżera pakietów Unity;
  3. Jeśli pakiet Firebase Unity SDK został zaimportowany jako .unitypackagesprzed 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:

    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 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.
  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. 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 po uruchomieniu gry w edytorze na 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.

c35166e224cce720.png

Wróć do Unity i jeszcze raz naciśnij Odtwórz.

Zobaczysz wtedy ostrzeżenie podobne do pierwszego:

5ad9ddb0d3a52892.png

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.

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

Upewnij się, że 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 tylko za pomocą jednej z tych metod.
  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 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.

  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 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ę.
  3. 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. Najlepszym sposobem jest usunięcie wszystkich pakietów Firebase za pomocą metod wymienionych 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 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 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 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łuje się pojedynczy plik dex. * Opcję 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 adbadb 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ń do 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 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.