Debugowanie procesu tworzenia, instalowania i uruchamiania gier

Wstęp

Poniżej znajdziesz instrukcje debugowania procesu kompilowania i kompilacji gier na Unity za pomocą 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.

Oprócz tego dokumentu zapoznaj się z najczęstszymi pytaniami na temat Firebase dla Unity, aby dowiedzieć się więcej.

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 Play i w jego trakcie.

Gdy Unity uruchomi lub wykryje zmiany w zależnościach, kodzie lub innych zasobach, spró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!.

Brakujące typy, klasy, metody i użytkowników

Wiele problemów z Firebase wynika z niezdolności edytora i kompilatora do znalezienia niezbędnych typów, klas, metod i członkó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>'

Jak rozwiązać ten problem:
  1. Jeśli w kodzie używasz klas lub metod Firebase, upewnij się, że udostępniasz je za pomocą prawidłowych dyrektyw using dla poszczególnych usług Firebase.

    1. Przykłady z filmu MechaHamster: Kolejny poziom dzięki Firebase Edition:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. Sprawdź, czy zostały zaimportowane odpowiednie pakiety Firebase:

    1. Aby zaimportować odpowiednie pakiety:
      1. Dodaj pakiet SDK Firebase Unity jako pakiety .unitypackage lub
      2. Sprawdź i wykonaj jedną z opcji opisanych w sekcji Dodatkowe opcje instalacji Unity.
    2. Upewnij się, że każda usługa Firebase w Twoim projekcie oraz EDM4U:
      • są w tej samej wersji,
      • Zostały zainstalowane wyłącznie jako aplikacje .unitypackage LUB wyłącznie za pomocą menedżera pakietów Unity.
  3. Jeśli pakiet SDK Firebase Unity został zaimportowany jako .unitypackage w wersji „10.0.0”, archiwum ZIP pakietu Firebase Unity zawiera pakiety z obsługą zarówno .NET 3.x, jak i .NET 4.x. Upewnij się, że projekt obejmuje tylko zgodny poziom .NET Framework:

    1. Zgodność wersji edytora Unity i poziomów .NET Frameworks opisano 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 odbudowuje projekt i czy próby odtworzenia filmu odzwierciedlają jego aktualny stan:

    1. Domyślnie edytor Unity jest ustawiony na ponowne kompilowanie po wykryciu zmian zasobu lub konfiguracji.
    2. Możliwe, że ta funkcja została wyłączona, a w edytorze Unity ustawiono ręczne odświeżanie/ponowne kompilowanie. W takim przypadku 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:

Zatwierdź pakiety Firebase w sekcji „Bezpieczeństwo i prywatność” w systemie macOS

Jeśli po uruchomieniu gry w edytorze w systemie Mac OS zobaczysz okno z komunikatem „FirebaseCppApp-<version>.bundle Nie można otworzyć, ponieważ nie można zweryfikować dewelopera”. Musisz zatwierdzić konkretny plik pakietu w menu Bezpieczeństwo i prywatność na Macu.

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 informacją, że zablokowano używanie „FirebaseCppApp-<wersja>.bundle”, ponieważ nie pochodzi ona od zidentyfikowanego dewelopera.

Kliknij przycisk Zezwól mimo to.

c35166e224cce720.png

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

Zobaczysz ostrzeżenie podobne do pierwszego:

5ad9ddb0d3a52892.png

Naciśnij Otwórz, a program będzie mógł kontynuować. Nie będzie już pojawiać się pytanie o ten konkretny plik.

Sprawdź, czy projekt zawiera prawidłowe pliki konfiguracji i korzysta z nich

  1. Upewnij się, że ustawienia kompilacji są odpowiednie dla odpowiedniego środowiska docelowego (iOS lub Android) w sekcji Plik > Ustawienia kompilacji. 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 w przypadku iOS) i wybierz 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 usłudze Assets/StreamingAssets/, sprawdź, czy nie ma tam komunikatów o tym, że Unity nie mógł edytować plików
  4. Sprawdź, czy plik Assets/StreamingAssets/google-services-desktop.json został wygenerowany i odpowiada pobranym plikom konfiguracyjnym.
    • Jeśli katalog StreamingAssets/ nie istnieje, a nie został wygenerowany automatycznie, utwórz go ręcznie w katalogu Assets.
    • Sprawdź, czy Unity wygenerowała teraz 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 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 każda usługa Firebase w projekcie ma tę samą wersję.

  1. Jeśli pakiety SDK Firebase zostały zainstalowane za pomocą .unitypackage, sprawdź, czy wszystkie biblioteki FirebaseCppApp w pakiecie Assets/Firebase/Plugins/x86_64/ są w 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 są tej samej wersji.
  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. Najprostszym sposobem jest usunięcie każdego pakietu Firebase za pomocą metod opisanych w tej sekcji dotyczącej migracji.

Błędy w programie do rozpoznawania nazw i błędów kompilacji urządzenia docelowego

Jeśli gra działa w edytorze (jest skonfigurowana pod kątem odpowiedniego celu kompilacji), sprawdź, czy External Dependency Manager for Unity (EDM4U) jest prawidłowo skonfigurowany i działa.

Repozytorium EDM4U GitHub zawiera szczegółowy przewodnik dotyczący tej części procesu, z którym zapoznaj się i wykonaj, zanim przejdziesz dalej.

Problemy z pojedynczym poleceniem Dex i minifikacja (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 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 dotyczących 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 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. * Tę opcję znajdziesz w sekcji Ustawienia odtwarzacza > Android > Ustawienia publikowania > Zmniejsz. * 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 minifikacji liczba przywołanych metod nadal przekracza limit, możesz włączyć multidex. W Unity możesz to zrobić na kilka sposobów:

  • Jeśli w sekcji Ustawienia gracza jest włączony Niestandardowy szablon Gradle, zmodyfikuj mainTemplate.gradle.
  • Jeśli do utworzenia wyeksportowanego projektu używasz Androida Studio, zmodyfikuj plik build.gradle na poziomie modułu.

Więcej informacji można znaleźć w przewodniku użytkownika multidex.

Omówienie i poprawianie błędów w czasie działania urządzenia docelowego

Jeśli 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 wyświetl 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ą planszą:

    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

Podczas korzystania z Logcat w Android Studio dostępne są dodatkowe narzędzia wyszukiwania, które ułatwiają generowanie produktywnego wyszukiwania.

iOS

Sprawdzanie logów

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

Problemy Swift

Jeśli napotkasz logi błędów zawierające wzmiankę o Swift, zapoznaj się z informacjami na ich temat w sekcji External Dependency Manager for Unity (Menedżer zależności zewnętrznych).

Dalsze kroki

Jeśli w grze nadal występują problemy z kompilowaniem, kompilacjami lub uruchamianiem aplikacji 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 na stronie pomocy Firebase.