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 instrumentu i adnotacją. 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.