Omówienie narzędzia Android Performance Tuner (Unity)

Z tego przewodnika dowiesz się, jak za pomocą wtyczki Unity rejestrować i przesyłać dane o czasie klatki z Unity w wersji 2017.4 lub nowszej.

W przypadku silników gier korzystających z języków C lub C++ zapoznaj się z przewodnikiem po natywnych silnikach gier.

Tło

Kluczowym elementem rozgrywki jest wydajność renderowania. Na wydajność renderowania wpływają 2 czynniki:

  • Liczba klatek: jak często rysowana jest klatka.
  • Ustawienia jakości grafiki: poziom wierności, z jakim jest prezentowana klatka, w tym wierność symulacji i grafiki.

W przypadku gier dobra wydajność renderowania jest definiowana w ten sposób:

  • zapewnia stabilną i stałą liczbę klatek (czyli odsetek klatek renderowanych z żądaną częstotliwością);
  • Renderowanie klatek z najwyższą możliwą częstotliwością przy zachowaniu stabilności, zwykle 30 lub 60 klatek na sekundę w zależności od typu gry.
  • Maksymalizowanie poziomu szczegółowości dla użytkownika przy danej wielkości i gęstości ekranu przy jednoczesnym osiąganiu pożądanej, stabilnej liczby klatek.

Biblioteka Android Frame Pacing ogranicza większość wahań czasu renderowania klatki, zapewniając stabilną liczbę klatek w grach. Pozostałe różnice w czasie wyświetlania klatek wynikają z poziomu szczegółowości wyświetlanej w niektórych scenach rozgrywki oraz możliwości graficznych urządzenia. Dzięki narzędziu Android Performance Tuner możesz określić momenty w grze, w których czas renderowania klatek jest krótszy lub dłuższy niż docelowy, i powiązać te problemy i możliwości z:

  • Określone ustawienia jakości
  • konkretne sceny w grze;
  • określone modele urządzeń lub ich specyfikacje,

Zapisywanie i przesyłanie danych

Biblioteka Tuning Fork wymaga, aby w każdej klatce była wywoływana jedna z jej funkcji tick przez bibliotekę Android Frame Pacing (lub przez silnik Unity w starszych wersjach Unity, w których nie ma biblioteki Frame Pacing). W bibliotece informacje o tych zdarzeniach są agregowane w histogramy, które są okresowo przesyłane do Google Play za pomocą punktu końcowego HTTP. Każdy znacznik jest rejestrowany jako powiązany z kluczem instrumentuadnotacją. Adnotacje definiujesz za pomocą wtyczki Unity.

Klawisze instrumentu

Klucz instrumentu wskazuje, z którego miejsca w ramce pochodzi znacznik, i jest liczbą całkowitą, którą należy przekazywać do każdego wywołania funkcji znacznika. Wtyczka Unity robi to automatycznie. Jeśli w ustawieniach Unity dla Twojej gry jest włączona opcja Zoptymalizowane tempo renderowania klatek (dostępna w Unity w wersji 2019.3.14 lub nowszej), narzędzie Android Performance Tuner będzie używać informacji z biblioteki Android Frame Pacing do raportowania ulepszonych danych.

Adnotacje

Adnotacje zawierają kontekstowe informacje o tym, co gra robi, gdy rejestrowany jest znacznik. Adnotacja może na przykład identyfikować dowolny z tych elementów:

  • bieżący poziom gry,
  • Wczytanie konkretnej sceny
  • Na ekranie jest „duży boss”
  • inne istotne informacje o stanie gry.

Adnotacje są definiowane w oknie dialogowym udostępnianym przez wtyczkę Unity.

Biblioteka Tuning Fork wewnętrznie używa formatu bufora protokołu Google do przechowywania adnotacji i parametrów wierności. Jest to dobrze zdefiniowany, wielojęzyczny protokół do rozszerzalnych danych strukturalnych. Więcej informacji znajdziesz w dokumentacji buforów protokołu.

Parametry wierności

Parametry wierności wpływają na wydajność i jakość grafiki gry, na przykład na poziom szczegółowości siatki, rozdzielczość tekstur i metodę antyaliasingu. Podobnie jak adnotacje, parametry wierności są definiowane w oknie dialogowym udostępnianym przez wtyczkę Unity.

Obciążenie pamięci i procesora

Cała pamięć używana przez bibliotekę Tuning Fork jest przydzielana podczas inicjowania, aby uniknąć niespodzianek w trakcie rozgrywki. Rozmiar danych zależy od liczby kluczy instrumentów, liczby możliwych adnotacji i liczby przedziałów w każdym histogramie. Jest on wielokrotnością tych wartości pomnożoną przez 4 bajty na przedział. Wszystkie histogramy są też dostępne w 2 kopiach, co umożliwia przesyłanie ich w trybie podwójnego buforowania.

Przesyłanie odbywa się w osobnym wątku i nie blokuje wywołań funkcji tick. Jeśli połączenie do przesyłania nie jest dostępne, zgłoszenie zostanie dodane do kolejki do późniejszego przesłania.

Wywołanie funkcji tick wiąże się z niewielkim obciążeniem przetwarzania: po prostu oblicza indeks w tablicy przedziałów histogramu i zwiększa liczbę całkowitą.

Żądania sieciowe

Biblioteka wysyła do punktu końcowego serwera 2 rodzaje żądań:

  • Żądanie generateTuningParameters podczas inicjowania
  • Okresowo podczas rozgrywki wysyłane jest żądanie uploadTelemetry, aby przesłać dane na serwer.

Gracze offline

Jeśli podczas inicjowania nie ma dostępnego połączenia, żądanie jest ponawiane kilka razy z coraz dłuższym czasem oczekiwania. Jeśli podczas przesyłania nie ma połączenia, przesyłanie jest buforowane. Przesłane pliki są przechowywane jako pliki w pamięci tymczasowej.

Wymagania

Aby używać wtyczki w grze, użyj obsługiwanej wersji Unity:

  • Unity w wersji 2017.4 lub nowszej i .NET w wersji 4.6
  • Aby używać plików rozszerzających APK, musisz mieć Unity 2018.2.
  • Aby uzyskać lepsze tempo klatek i pomiary GPU, wymagana jest wersja Unity 2019.3.14 lub nowsza.
  • Aby obsługiwać sceny Addressables, musisz mieć Unity w wersji 2019.3 lub nowszej oraz pakiet Addressables w wersji 1.19.4 lub nowszej.

Integrowanie narzędzia Android Performance Tuner w Unity

Informacje o integrowaniu narzędzia Android Performance Tuner w Unity znajdziesz w artykule Włączanie interfejsu API.