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.