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

Ten przewodnik opisuje, jak za pomocą wtyczki Unity rejestrować i przesyłać dane o czasie renderowania klatek z Unity w wersji 2017.4 lub nowszej.

Jeśli korzystasz z silników gier korzystających z języka C lub C++, zapoznaj się z przewodnikiem po natywnych silnikach gier.

Tło

Kluczowym elementem rozgrywki jest wydajność renderowania. Wydajność renderowania zależy od tych 2 danych wejściowych:

  • Liczba klatek: częstotliwość renderowania klatki.
  • Ustawienia jakości grafiki: poziom wierności wyświetlanej klatki, w tym symulacja i grafika.

W przypadku gier dobra wydajność renderowania jest definiowana jako:

  • Stabilna, stała liczba klatek (czyli odsetek klatek renderowanych z pożądaną częstotliwością).
  • Klatki renderowane z najwyższą możliwą częstotliwością przy zachowaniu stabilności, która zwykle wynosi 30 lub 60 FPS w zależności od typu gry.
  • Maksymalizacja poziomu szczegółów dla użytkownika, biorąc pod uwagę jego rozmiar i gęstość ekranu, a jednocześnie uzyskanie pożądanej, stabilnej liczby klatek.

Biblioteka Android Frame Pacing ogranicza znaczną liczbę zmian w czasie renderowania klatek, zapewniając stabilną liczbę klatek w grach. Pozostałe różnice w czasie renderowania klatki wynikają z poziomu szczegółów wyświetlanych podczas rozgrywki oraz z możliwości graficznych urządzenia. Dzięki narzędziu Android Performance Tuner możesz określić, kiedy podczas rozgrywki czas renderowania klatki jest dłuższy lub krótszy od docelowego. Te problemy i możliwości pomogą Ci:

  • Określone ustawienia jakości
  • Konkretne sceny w grze
  • Konkretne modele lub dane techniczne urządzenia

Nagrywanie i przesyłanie danych

Biblioteka Tuning Fork korzysta z jednej z funkcji znaczników wywoływania każdej klatki przez bibliotekę Android Frame Pacing (lub przez silnik Unity w przypadku starszych wersji Unity, w których nie ma biblioteki Frame Pacing). W bibliotece informacje te są agregowane w histogramach, które są następnie okresowo przesyłane do Google Play przez punkt końcowy HTTP. Każde znacznik jest rejestrowane jako powiązane z kluczem instrumentu i adnotacją. Adnotacje definiuje się za pomocą wtyczki Unity.

Instrumenty klawiszowe

Klawisz instrumentu wskazuje miejsce w ramce, z którego pochodzi znacznik, i jest liczbą całkowitą, która musi być przekazywana do każdego wywołania funkcji tick. Robi to automatycznie przez wtyczkę Unity. Jeśli w ustawieniach Unity gry (dostępnej w wersji 2019.3.14 lub nowszej jest włączona opcja Optimized Frame Pacing), Android Performance Tuner będzie tworzyć raporty o ulepszonych danych, korzystając z informacji z biblioteki Android Frame Pacing.

Adnotacje

Adnotacje zawierają kontekstowe informacje o tym, co robi gra po zarejestrowaniu sygnału. Adnotacja może na przykład identyfikować następujące elementy:

  • obecny poziom gry;
  • Wczytuję konkretną scenę
  • Na ekranie pojawia się „duży szef”
  • inne istotne informacje o stanie gry.

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

Wewnętrznie biblioteka Tuning Fork wykorzystuje format bufora protokołu Google do przechowywania adnotacji i parametrów wierności. Jest to dobrze zdefiniowany, wielojęzyczny protokół do rozszerzania uporządkowanych danych. Więcej informacji znajdziesz w dokumentacji buforów protokołu.

Parametry wierności

Parametry wierności wpływają na wydajność i jakość grafiki gry, np. poziom szczegółowości siatki, rozdzielczość tekstur i metodę anti-aliasingu. Podobnie jak w przypadku adnotacji, parametry wierności definiuje się w oknie dialogowym udostępnianym przez wtyczkę Unity.

Narzut pamięci i procesora

Cała pamięć używana przez bibliotekę Tuning Fork jest przydzielana w trakcie inicjowania gry. Rozmiar danych zależy od liczby kluczy instrumentów, liczby możliwych adnotacji i liczby zasobników na każdym histogramie. Jest to wielokrotność tych wartości 4 bajtów na każdy zasobnik. Dostępne są też 2 kopie wszystkich histogramów, które można przesłać jako podwójnie buforowane.

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

Wywołanie funkcji tick nie wymaga wiele przetwarzania. Funkcja ta po prostu oblicza indeks do tablicy histogramów 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 wysłać dane na serwer.

Odtwarzacze offline

Jeśli podczas inicjowania nie ma dostępnego połączenia, żądanie jest ponawiane kilka razy z dłuższym czasem ponowienia. W przypadku braku połączenia przesyłanie jest przechowywane w pamięci podręcznej. Przesłane pliki są przechowywane jako pliki w pamięci tymczasowej.

Wymagania

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

  • Unity w wersji 2017.4 lub nowszej i .NET w wersji 4.6
  • Do korzystania z plików rozszerzeń APK wymagana jest wersja Unity 2018.2
  • Aby uzyskać dokładniejsze pomiary szybkości klatek i umożliwiające pomiary GPU, musisz mieć Unity w wersji 2019.3.14 lub nowszej
  • Do obsługi scen Addressables wymagane jest oprogramowanie Unity 2019.3 lub nowsze oraz pakiet Addressables w wersji 1.19.4 lub nowszej.

Zintegruj narzędzie Android Performance Tuner z Unity

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