W tym przewodniku opisujemy typowy cykl tworzenia gier. Po przeczytaniu tego , może Ci się przydać jako źródło informacji.
W Unity cykl programowania składa się z 3 elementów. fazy:
- Planowanie i projektowanie
- Programuj i testuj
- Publikowanie i utrzymywanie
Planowanie i projektowanie
Na etapie planowania i projektowania musisz określić sposób budowania gry. Ty podjąć decyzję o tym, jak sprostać wyzwaniom związanym z tworzeniem aplikacji na urządzenia mobilne, wskazać narzędzia i procesy do wykorzystania podczas programowania.
Uzyskaj opinie od wszystkich członków zespołu
Pracuj nad sztuką, inżynierią, projektowaniem, dźwiękiem i integracją zespołów produkcyjnych do identyfikowania i rejestrowania zadań wdrożeniowych. Na przykład:
- Zespoły artystyczne mogą tworzyć tekstury zasobów i budżety sieci typu mesh dla postaci i środowisk.
- Inżynieria może określić punkty kontrolne pamięci i wydajności dla profilowanie na każdej platformie.
- Projekt może zaplanować mechanikę gry, która umożliwi rozgrywkę.
- Eksperci ds. audio mogą sprawdzić wymagania dotyczące ciągłości dźwięku Interfejs, dźwięki przestrzenne 2D i 3D.
- Wersja produkcyjna może informować o wymaganiach dotyczących wprowadzenia na rynek i utrzymywać współpracę i pracę w zespole.
Projektowanie na urządzenia mobilne
Tworzenie aplikacji na platformy mobilne wiąże się z określonymi kwestiami, Na przykład:
- Zmienne współczynniki proporcji ekranu
- Zużycie energii
- Ograniczanie wykorzystania energii i procesora
- Dotykowe wprowadzanie danych
- Programowanie na wielu platformach
- graficzne interfejsy API (Vulkan lub OpenGL ES)
Szczegółowe informacje na temat kwestii związanych z projektowaniem na urządzenia mobilne znajdziesz w artykule Tworzenie aplikacji na Androida w Unity z Unity Akademii Google Play.
Programuj i testuj
Na etapie programowania i testowania tworzysz grę i przeprowadzasz testy przygotowań do publikacji. Masz ograniczony dostęp do użytku wewnętrznego testowanie w Google Play aby przygotować się do spełnienia wymagań dotyczących wprowadzenia na rynek. Ulepszasz zgodnie ze strategią wdrażania i porządkowanie zasobów w Unity Play Asset Delivery i jedność Obiekty adresowe systemów uczących się.
W tych sekcjach opisano narzędzia i techniki Unity, które zostały zaprojektowane które pomogą Ci tworzyć treści na Androida.
Renderowanie
Renderowanie to proces rysowania zasobów 3D i 2D ze sceny w Unity na ekranie. Mechanizm Unity obsługuje renderowanie należy wziąć pod uwagę kilka czynników związanych z platformą Android.
Tekstury
Określ na podstawie wartości docelowej, czy potrzebujesz największych rozmiarów tekstur urządzenia. Po profilu alokacja pamięci, należy ocenić potencjalne oszczędności wynikające ze zmiany wartości docelowej rozmiar tekstury.
Czas renderowania klatki
Aby zapobiec przegrzewaniu się urządzeń z Androidem, ustaw docelowy czas renderowania klatek poniżej 21 milisekund. Czasami, na przykład w czasie wczytywanych lub krótkich przerw filmowych, czasy renderowania klatek może przekraczać 21 milisekund, ale należy zmieścić się milisekund w przypadku podstawowej rozgrywki.
Na platformach mobilnych wymuszany tryb VSync będzie ograniczać liczbę klatek, jeśli tego nie zrobisz. osiągnąć minimalny cel. Na przykład przy aktualizacji ekranu 60 Hz, jeśli nie naciśniesz klawisza 60 kl./s, gra zostanie ograniczona do 30, jeśli nie uda Ci się zejść 30, 15.
Wiele urządzeń z Androidem ma częstotliwość odświeżania 60 Hz i 120 Hz. Rozważ zalety kierowania na znacznie krótsze czasy klatek (docelowy 10 ms dla aktualizacje 60 Hz i 5 ms w przypadku 120 Hz) bez ryzyka ograniczania przepustowości sieci. zużycie baterii, co przekłada się na wyższe współczynniki renderowania.
Aby ustawić konkretną liczbę klatek w grze w Unity, użyj Application.targetFrameRate.
Biblioteka Frame Pacing na Androidzie pomaga renderować płynnie wtedy, gdy wyświetlenie następnej klatki w aplikacji zajmuje więcej czasu. niż wymagana częstotliwość odświeżania ekranu. W przypadku Unity w wersji 2021 i nowszych: włączenie tempa wyświetlania klatek w Androidzie ustawia częstotliwość odświeżania ekranu na która najlepiej pasuje do docelowej liczby klatek. Dzięki temu gra nie: marnować energię na niepotrzebne aktualizacje wyświetlacza.
Aby włączyć bibliotekę, w sekcji Ustawienia projektu > Odtwarzacz, poniżej Ustawienia na Androidzie, zaznacz pole Zoptymalizowane tempo wyświetlania klatek.
Interfejs API interfejsu Vulkan
Vulkan to działająca na wielu platformach o dużej wydajności 3D graficzny interfejs API, który ma niewielki narzut w porównaniu z interfejsem OpenGL ES. Unity może używać interfejsu Vulkan na dwa różne sposoby.
Interfejs API Auto Graphics
Możesz używać interfejsu Auto Graphics API z interfejsem Vulkan, ale ten interfejs może się różnić w zależności od zainstalowanej wersji Unity. Możesz wybrać możesz to zrobić, klikając Ustawienia projektu > Odtwarzacz > Renderowanie.
Wybierając wersję Unity, pamiętaj o tych kwestiach: użyj:
- Unity 2021.1 i starsze wersje nie obsługują interfejsu Vulkan w wersji Auto Interfejs Graphics API. Unity próbuje używać OpenGL ES 3.2. Jeśli urządzenie nie obsługuje OpenGL ES 3.2, Unity przełącza się na OpenGL ES 3.1, 3.0 lub 2.0 (w tej kolejności).
- Unity 2021.2 i nowsze używają interfejsu Vulkan najpierw. Jeśli urządzenie nie obsługuje języka Vulkan, Unity przełącza się na OpenGL ES 3.2, 3.1, 3.0 lub 2.0.
Interfejsy API do obsługi grafiki
Możesz też ręcznie włączyć interfejs Vulkan, wyłączając interfejs Auto Graphics API. Jeśli używasz Unity 2021.1 lub poprzedniej wersji, to jedyny sposób interfejsu Vulkan.
Jeśli interfejs Vulkan znajduje się wyżej na tej liście niż OpenGL ES, Unity najpierw próbuje użyć interfejsu Vulkan. Jeśli urządzenie nie obsługuje interfejsu Vulkan, Unity działa w środowisku OpenGL ES. Szczegółowe informacje o usłudze Vulkan na Androidzie znajdziesz w artykule Pierwsze kroki z platformą Vulkan. jak korzystać z nowoczesnych interfejsów API związanych z grafiką i zoptymalizować wydajność gry.
Rysuj połączenia
Wszystko, co jest widoczne na ekranie, jest powiązane z co najmniej 1 wywołaniem rysowania. Wł. platform mobilnych, należy zoptymalizować i zmniejszyć liczbę wywołań, przesyłanych do procesora graficznego (GPU).
Połączenia telefoniczne można porównać do samochodów stojących na sygnalizacji świetlnej. Po światło zmienia kolor na zielony, przez niego może przejechać pewna liczba samochodów zmian. Kiedy dioda zacznie świecić na żółto, oznacza to osiągnięcie idealnego kadru. (21 ms), a kiedy dioda zmieni kolor na czerwony, to milisekundowy limit czasu renderowania. wszystko, co w przeszłości ma wpływ na następną ramkę renderowania, więc uzyskana liczba klatek będzie niższa od docelowej wartości 30 kl./s.
Aby dowiedzieć się, jak poprawić wydajność wywołania rysowania w grze, zobacz grupowane na stronie Unity Support.
Cienie
Przesyłanie przez cienie wywołania renderowania może zużywać najwięcej GPU, Czas korzystania z GPU nawet w prostych środowiskach. Zmniejszenie kosztów rzucania cienia rysowanie, eksperymentuj z mocnym, a nie z miękkim cieniem. Jeśli W przypadku tańszych urządzeń jest to wciąż zbyt kosztowne rozwiązanie, w postaci cieni zamiast intensywnych cieni.
Tekstura
Zalecana tekstura format kompresji tekstur RGB i RGBA na Androidzie to ASTC. W Unity minimalna opcja kompresji tekstur, której należy użyć na Androidzie. jest ETC2. Możesz wrócić do ETC2 jako kopię zapasową z ASTC w ustawieniach kompilacji Unity.
Pełną listę obsługiwanych formatów według platformy znajdziesz w dokumentacji Unity na stronie Ręcznie: zalecane, domyślne i obsługiwane formaty tekstur, według platformy.
Interfejs użytkownika i formaty obrazu
Aplikacja Unity Symulator urządzenia który umożliwia podgląd różnych rozdzielczości i orientacji ekranu urządzeń format obrazu bezpośrednio w Edytorze Unity. Możesz przełączać się między widokiem gry i widok Symulatora urządzeń.
Zobacz podgląd narzędzia na stronie Przeprowadź symulację gry za pomocą symulatora urządzenia w Unity.
Kod źródłowy Trivial Kart znajdziesz w gry-przykłady w repozytorium GitHub.
Układ i prawidłowość elementów kanwy interfejsu możesz szybko sprawdzić w widoku Symulatora urządzeń po wybraniu opcji urządzenia z menu, menu:
.Więcej technik optymalizacji UI w Unity znajdziesz w tym samouczku na Unity: optymalizowanie UI Unity
Fizyka
Mechanizm Nvidia PhysX jest wbudowany w Unity. Domyślne ustawienia może być drogie na urządzeniach mobilnych, dlatego pamiętaj o tych kwestiach:
- Zastanów się nad docelową liczbą klatek i ustaw odpowiednio stały krok w czasie. Wartość domyślna to 0,02 ms lub 50 Hz. Możesz zwiększyć go do 0,03 lub dla docelowej wartości 30 kl./s.
- Rozważ uproszczenie zderzeń sieci typu mesh i zminimalizowanie zderzeń warstw Macierz do określania interakcji między obiektami gry w określonej warstwie .
Informacje na temat: ustawienia fizyki i optymalizacji gier mobilnych znajdziesz E-book o optymalizacji gier mobilnych od Unity.
Profil
Deweloperzy aplikacji często zapominają lub ignorują profilowanie do momentu, gdy aplikacja gdy dojdzie do krytycznego punktu awarii. Dobrze jest zaplanować czas profilowania na cały proces oraz stosować następujące sprawdzone metody:
- Określ kluczowe punkty w trakcie programowania, kiedy możesz przydzielić profilowanie w czasie, a nie przypadkowo.
- Zapisz zrzuty profilu, aby używać ich z Analizator profili Unity
- Profiluj grę na urządzeniach docelowych, aby dokładnie wiedzieć, jak to działa że gra działa na obecnym etapie rozwoju.
- Profiluj różne części gry.
- Profiluj, jak gracze grają w grę. Nie profiluj tylko gry podczas bezczynności urządzenia lub ekranu wstrzymania).
- Profil w trybie długotrwałym po pewnym czasie uruchomienia gry aby ułatwić wykrywanie problemów z dławieniem, które mogą wystąpić, gdy urządzenia są gorące.
Z poniższych narzędzi do profilowania możesz korzystać oddzielnie lub w połączeniu z innymi narzędziami.
Unity Profiler to w pełni zintegrowany program profilujący Unity Profiler, które może działać w kodzie w edytorze Unity połącz się z samodzielnym urządzeniem z Androidem z kompilacjami w trybie programisty.
Inspektor GPU na Androidzie z Inspektorem GPU w Androidzie (AGI) umożliwia debugowanie na poziomie klatki. AGI również analizuje usługi systemowe, w tym GPU, CPU, pamięć, baterię i GPU liczniki zdarzeń.
Aby dowiedzieć się więcej o profilowaniu gry w Unity, obejrzyj film Wprowadzenie do profilowania w Unity lub przeczytaj Kompleksowy przewodnik po profilowaniu gier Unity z Unity.
Zarządzanie pamięcią
Procesy Androida współdzielą dostępną pamięć na urządzeniu docelowym. Zalecenia profiluj wykorzystanie pamięci, gdy docelowe urządzenie testowe ma wystarczająco dużo wolnej pamięci. i zasobami Google Cloud. Regularnie wykonuj testy pamięci w trakcie gry, aby móc porównywać sesje i trendy wykorzystania pamięci w odpowiedni sposób.
Pracując w skryptach w języku C#, zachowaj ostrożność podczas korzystania z ciągów znaków, porównania ciągów znaków i alokacje obiektów związanych z ciągami znaków (np. JSON); pliki ustawień gier). Generują częste alokacje pamięci i mogą mogą przyczyniać się do fragmentacji.
Rozważ użycie
StringBuilder
klasa na duże sekwencje manipulacji ciągami znaków, nad konkatenacją miejscową
ciągi znaków (np. „this” + „is” + „a” + „złe” + „propozycje”
StringBuilder.Concat()
wywołań funkcji).
Więcej informacji o ciągach znaków znajdziesz tu: Ciągi tekstowe i tekst w dokumentacji Unity.
Porównaj zasoby tekstowe TextAsset i JSON z preferencyjnym
Typ: ScriptableObject
. ScriptableObjects
– obsługa przechowywania danych z różnych scen
i umożliwia wprowadzanie zmian w czasie między edytorem a odtwarzaniem.
Artykuł do dyskusji na temat korzystania z alternatywnych rozwiązań domyślnych Uchwyt JSON do optymalizacji pod kątem urządzeń mobilnych, zobacz artykuł Ukryta optymalizacja w grach sieciowych na Hutch.
Użyj Interfejs Memory Advice API aby określić wykorzystanie pamięci w czasie działania. Interfejs API pokazuje wskaźnik stopy wskazującego wysokie, normalne i niskie wykorzystanie pamięci. Ty mogą zasubskrybować wskaźnik, aby otrzymywać powiadomienia, albo bezpośrednio przeprowadzać ankietę dla bieżącego stanu. Gdy pojawi się czerwony sygnał, rozważ zmniejszenie obiektu gry w pamięci podręcznej lub w pamięci podręcznej. Uwzględnij ten kontekst w danych telemetrycznych gier podczas transmisji na żywo i sprawdzać wskaźniki wydajności po uruchomieniu usługi.
Aby dowiedzieć się więcej o porządkowaniu pamięci na urządzeniach z Androidem i o tym, jak Unity działa, obejrzyj Informacje o wykorzystaniu pamięci na Androidzie (z Google I/O 2018) Omawiamy w nim rodzaje problemów z pamięcią oraz przypadki jej braku zaczyna działać.
Usuwanie odpadów
Czyszczenie pamięci w zarządzanym środowisku pamięci czyści nieużywaną pamięć fragmenty, które można poddać recyklingowi dla aplikacji. Obserwuj sprawdzone metody czyszczenia pamięci w celu uniknięcia zbędnego przydziału zasobów pamięci.
Na przykład utwórz pulę obiektów gry, zamiast korzystać z funkcji na żądanie
przydziały (GameObject.Instantiate
). W przypadku dużych basenów:
przypisywanie do wielu klatek, aby zmniejszyć ryzyko
nie odpowiada na podstawowych urządzeniach z Androidem.
Weź pod uwagę poniższy fragment kodu, by utworzyć prostą współudział, która jest wywoływana z Początek zachowania monochromatycznego:
// Option 1: Bad for memory management - causes allocation each iteration
IEnumerator UpdateEnemyTarget() {
while (enabled) {
yield return new WaitForSeconds(1.0f);
// Some intermittent function check
}
}
// Option 2: Better for memory management - allocation of yield instruction once, reused each iteration
private YieldInstruction waitForSecond = new WaitForSeconds(1.0f);
IEnumerator BetterUpdateEnemyTarget() {
while (enabled) {
yield return waitForSecond;
// Some other intermittent function
}
}
Dostępne opcje
edytuj
pliku szablonu MonoBehaviour, aby usunąć domyślne ustawienia Start()
i
Update()
pośrednictwa w celu uniknięcia przypadkowego pozostawienia pustego pola
podczas projektowania.
Kolejność wykonywania zdarzeń monobetycznych znajdziesz w tych artykułach: Kolejność wykonywania funkcji zdarzeń w dokumentacji Unity. Aby dowiedzieć się więcej o zarządzaniu pamięcią, zobacz szkolenie Zarządzanie pamięcią w Unity
Wskazówki dotyczące optymalizacji wydajności gier mobilnych znajdziesz na stronie Zoptymalizuj wydajność gier mobilnych: wskazówki najlepszych inżynierów Unity dotyczące profilowania, pamięci i architektury kodu
Łączenie z użyciem gotowych ustawień
Skoki czasu renderowania klatek procesora są prawie całkowicie spowodowane przez tworzenie instancji Prefab gry. Rozważ wstępne ogrzewanie pul obiektów na pociski, odradzających się wrogów oraz efekty wizualne przed wejściem do gry, aby ograniczyć wyeliminować gwałtowne skoki obciążenia procesora podczas uruchamiania. Możesz rozłożyć dodatkowe optymalizacje na wielu „klatkach inicjujących” podczas wczytywania lub są sekwencje wprowadzające.
W zasobie Unity znajdziesz wiele zewnętrznych zasobów do łączenia zasobów Sklep związane z zarządzaniem pulą obiektów gier. Możesz również tworzyć własne. Zobacz Wprowadzenie do puli obiektów w Unity Learn
Dostawa zasobów
Gdy aplikacja jest uruchamiana po raz pierwszy, jest ograniczona wdrożono w Google Play. W zależności od rozmiaru i charakteru gry mogą potrzebować niektórych lub wszystkich zasobów gry (modeli postaci, środowisk, elementy interfejsu itd.), tak aby gracze mogli korzystać z aplikacji w oczekiwany sposób.
Za pomocą Play Asset Delivery (PAD) – do zarządzania zasobami, których wymaga gra podczas instalacji, lub na żądanie. Pakiety zasobów Unity są zintegrowane, PAD i za pomocą tego narzędzia możesz określić, które elementy mają zostać dostarczone.
Adresowane
Konfigurowanie zasobów dynamicznych, takich jak prefabs, tekstury i dźwięk plików. Wykonanie tych czynności nie jest już skomplikowaną operacją, jeśli i sprawdzić system nazewnictwa elementów Addressables. Można adresować zasoby oddzielają sposób organizacji treści od sposobu tworzenia i wczytywania swoje treści. System Addressables zastępuje foldery Resources i zasobów, Pakiety ułatwiające odwoływanie się do zasobów i ładowanie ich w czasie działania.
Na przykład zobacz Projekt demonstracyjny z wykorzystaniem pakietu Addressables w GitHubie. Informacje o rozwoju usługi Addressables znajdziesz tutaj: Addressable Asset System (System zasobów adresowych na blogu Unity).
Układ zasobów z adresami URL ma zalety i wady grupowanie zbyt mało lub Zbyt wiele zasobów do wspólnych pakietów. Aby dowiedzieć się więcej o zarządzaniu treścią w Adresy URL, patrz Uprość zarządzanie treścią dzięki adresom ukierunkowanym.
Możesz skonfigurować
wersję demonstracyjną i eksperymentuj z trybami dostępu, aby
obsługi systemu Addressables. Możesz też wyświetlić projekt open source
BuildLayout Explorer dla Unity 2019.3 i nowszej wersji,
i sprawdź raport buildlayout.txt
wygenerowany przez
Adresy URL.
Zasoby Chop Chop, projektu Unity Open, zostały spakowane za pomocą System adresowy do całego załadunku i wyładowywania. Zobacz Pakowanie treści za pomocą komponentów adresowanych | Otwórz devlog projektu , aby zobaczyć przewodnik po strukturze i konfiguracji elementów adresowalnych pakiety.
W projekcie Chop Chop domyślnie wczytywana jest jedyna scena, czyli Zdarzenie inicjujące.
została skonfigurowana tak, aby wykorzystywała AssetReferences
zamiast bezpośrednich linków do zasobów w
projektu (sceny, wstępy itp.).
Kod źródłowy dla parametru Projekt Unity Open: Chop Chop znajdziesz na GitHubie. Chociaż projekt nie jest już w fazie rozwoju, a także repozytorium Git i dokumentacja.
Wtyczki innych firm
Jeśli używasz wtyczek innych firm, takich jak te w zasobie Unity Przechowaj, sprawdź foldery i usuń z nich niepotrzebne zasoby Zasoby. Podczas kompilacji Unity gromadzi wszystkie które znajdują się w folderach Resources i pakują je w jeden który jest dostępny w czasie działania aplikacji. Może to spowodować zwiększenie rozmiaru gotowego pakietu, i często nie jest potrzebne.
Aby szybko znaleźć wszystkie foldery zasobów, wyszukaj Resources w Projekt panel. Następnie możesz kliknąć każdy z nich, aby określić, co zawiera i czy jest niezbędna do działania gry.
Publikowanie i utrzymywanie
Gdy wszystko będzie gotowe do premiery Twojej gry mobilnej, zdecyduj, kogo chcesz zaprosić do nowych wersji, metody przeprowadzania testów alfa i beta oraz sposobów ich monitorowania i monitorowania. i wydajności po aktualizacji.
Analiza opinii na temat limitowanej wersji
Możesz udostępnić aplikację ograniczonej grupie odbiorców docelowych i wdrożyć wersję beta na większą skalę. testów lub aktywuj grę, by uzyskać pełną dostępność na wszystkich rynkach. Dzięki limitowanej wersji, możesz dostosować wydajność aplikacji w oparciu o odbiorców i kolekcji urządzeń.
Na przykład możesz użyć Android Performance Tuner na Unity oraz Google Analytics dla Unity znajdziesz statystyki dotyczące wydajności aplikacji i trendów wśród graczy. które Twój zespół programistów może dostroić i wprowadzić aktualizacje. Możesz też użyć swojej dane analityczne do planowania kontynuacji podobne gry z podobnego gatunku.
Testy alfa i beta
Po skonfigurowaniu profilu aplikacji w w Konsoli Google Play, możesz przygotować w ramach testów alfa i beta oraz rozprowadzaj je wśród ograniczonej grupy odbiorców weryfikację przed opublikowaniem. Według ograniczonej grupie odbiorców, można rozwiązać ewentualne problemy na pula urządzeń i zebranie wstępnych opinii, na które możesz odpowiedzieć, zanim się tam udasz dostępne na całym świecie.
Twoje kompilacje Unity są rozpowszechniane za pomocą pakietów Android App Bundle. Więcej informacji: zobacz Ręcznie: dostarczanie do Google Play od Unity, w którym opisujemy zmiany z plików APK w pakiety AAB .
Monitorowanie i śledzenie
Na etapie transmisji i dystrybucji gry możesz używać Androida Android Vitals, aby ułatwić śledzenie – problemy z wydajnością na urządzeniach, do których nie miałeś dostępu w okresie programowania i testowania. Aby dowiedzieć się więcej, zobacz Nowości w grach w narzędziu Zasięg i urządzenia oraz Android Vitals
Często większe zespoły programistów mają unikalne i niestandardowe potoki telemetryczne gier które dostarczają danych związanych z wydajnością urządzenia. Pamiętaj, by korzystać z Android Performance Tuner (APT) i odpowiednią wtyczkę do Unity, która pozwala dołączać do spotkania przez telefon jakość grafiki, czas wczytywania i porzucenie. Postępuj zgodnie z szczegółowy przewodnik w Integracja narzędzia Android Performance Tuner z grą Unity
Cykl życia gry nie kończy się po rozpoczęciu transmisji. Monitorowanie i utrzymywanie wydajności i opinie na ich temat oraz reagowanie na nie jest kluczowe. zadowoleni użytkownicy, pozytywne recenzje i powszechne rozpowszechnienie Twojej gry na wszystkich rynkach.