Projektowanie dla wydajności oznacza przestrzeganie kilku najlepszych praktyk podczas budowania swojego doświadczenia.W porównaniu do znajdowania i naprawiania problemów z wydajnością później w procesie rozwoju projektowanie dla wydajności na wczesnym etapie może zaoszczędzić dużo czasu i wysiłku.
Urządzenia z niższej półki
Urządzenia z niższej półki, w szczególności urządzenia mobilne, mają poważne ograniczenia pamięci i są podatne na awarie z powodu błędów z pamięcią niewystarczającą (OOM):
Jeśli chcesz wspierać urządzenia z niższej półki, wybierz co najmniej jedno urządzenie "linii podstawowej", przetestuj na nim swoje doświadczenia w trakcie procesu rozwoju i zwróć szczególną uwagę na szybkość klatek i zużycie pamięci.W miarę rozwiązywania problemów w swoim doświadczeniu, wykorzystaj te obszary, aby zidentyfikować limity swojego urządzenia.
Na przykład możesz przetestować doświadczenie z włączonymi statystykami debugowania Render ( ShiftF2 ) i Podsumowanie ( ShiftF2 ) .Jeśli szybkość klatek zaczyna spadać w szczególnie zatłoczonej strefie, możesz przeanalizować liczby Rysuj ( sceny ) i określić, że musisz pozostać poniżej 1,000 wezwań do rysowania i 1,000,000 trójkątów, aby doświadczenie działało dobrze na twoim podstawowym urządzeniu.
Albo możesz sprawdzić Konsolę programisty ( F9 ) i zauważyć, że zużycie pamięci jest trochę wysokie, chyba że włączysz streamowanie.Rozumienie ograniczeń urządzeń może pomóc Ci trzymać się ich, gdy nadal budujesz swoje doświadczenie.
Emulator urządzenia w Roblox Studio jest przydatny do sprawdzania proporcji aspektu i sterowania, ale nie jest dokładny pod względem zużycia pamięci; gdy testujesz doświadczenie w Studio, uruchamia serwer i klient, więc zużycie pamięci jest znacznie wyższe.
Bardziej ogólnie rzecz biorąc, testowanie na różnych urządzeniach może pomóc sprawdzić, czy doświadczenie odpowiada Twoim oczekiwaniom wizualnym i wydajnościowym na różnych poziomach jakości grafiki.Dla znacznie bardziej szczegółowego przykładu tego, jak możesz myśleć o optymalizacji swojego doświadczenia dla urządzeń mobilnych z niższej półki, zobacz Optymalizacja budowania i skryptowania w świecie rzeczywistym.
Transmisja i teleportacja
Streamowanie instancji pozwala Roblox dynamicznie ładować i rozładowywać treści 3D i jest świetną opcją dla większości miejsc, szczególnie większych.Streamowanie poprawia czas dołączania, zmniejsza ślad pamięci i zwiększa szybkość ram.Aby uzyskać więcej informacji, zobacz Poprawa wydajności.
Rozważ złamanie dużych miejsc na mniejsze i użycie teleportacji, aby przenieść graczy między nimi.Ta metoda może zmniejszyć początkowe czas przyłączania, ale narzuca dodatkowe czasy przyłączania, gdy gracze teleportują się z miejsca na miejsce.Korzyści z wykorzystania pamięci zależą od rozmiaru miejsca i od tego, czy włączyłeś strumieniowanie.
Nawet ignorując kwestie wydajności, możesz odkryć, że posiadanie wielu miejsc uprości proces rozwoju, szczególnie jeśli regularnie dodajesz nowe treści do swojego doświadczenia lub jesteś częścią większego zespołu.
Materiały i duplikacja
Zintegrowane materiały zużywają znacznie mniej pamięci niż niestandardowe tekstury, ale mogą nie pasować do twojej artystycznej wizji.Spróbuj używać materiałów w każdej możliwej sytuacji, aby zachować budżet pamięci dla tekstur, które są centralne dla twojego doświadczenia.
Podczas tworzenia zasobów przekształć je w pakiety.Dodawanie pakietów do przepływu pracy pomaga uniknąć wspólnego problemu duplikowanych zasobów z różnymi identyfikatorami, które mogą wpłynąć na wydajność.
Gdy dodajesz siatki i tekstury, używaj ich i ponownie ich używaj, zamiast importować duplikaty.Przesuwając, obracając i pokrywając, możesz tworzyć bogate, zróżnicowane środowiska, które wymagają bardzo niewielu wezwań do rysowania.Aby uzyskać więcej informacji, zobacz Usuń powielone tekstury.
Przezroczystość
- Unikaj wartości przejrzystości innych niż 0 (widoczne) i 1 (niewidoczne).Kiedy używasz częściowej przejrzystości, bądź szczególnie ostrożny, aby uniknąć przekroczenia wysokiej przejrzystości.
Skryptowanie
Gdy tylko to możliwe, pisz kod z wydarzeniami zamiast obliczeń per-frame.Pri 60 FPS, całkowity budżet na każdą ramę wynosi 16,67 milisekund (ms).Nawet pozornie drobne obliczenia per-frame mogą wykorzystać znaczną część tego budżetu.
Znajdź sposoby na rozbicie długiego kodu na zarządzalne kawałki.Jeśli kawałek kodu potrzebuje 100 ms na wykonanie i uruchamiasz go za każdym razem, twoje doświadczenie może działać tylko z prędkością 10 FPS.Jeśli zdecydujesz się uruchomić kod tylko raz na sekundę w doświadczeniu, które inaczej działa z prędkością 60 FPS, 59 z twoich ram przybywa po 16,67 ms...a następnie jeden po 100 ms, który powoduje drgające zatrzymanie
Zamiast tego zbadaj, jak możesz rozbić kod.Możesz wykonać 5 ms pracy na ramę, użyj task.wait() , i mieć ukończone obliczenia co 20 ram, przy jednoczesnym utrzymaniu 60 FPS.Wielowątkowość, czasami nazywana równoległą Luau, może również pomóc.
Użyj metody RBXScriptConnection:Disconnect(), aby powstrzymać funkcje przed niepotrzebnym wezwaniem w następnym razie, gdy wystrzeli wydarzenie.
Nie wywołuj tej samej metody za każdym razem, gdy potrzebujesz wartości. Wywołaj metodę raz, przechowaj wartość, a następnie zastąp ją później w razie potrzeby.
Nie przechowuj wszystkiego w ReplicatedStorage.Klient ładować wszystko, co jest w tym pojemniku.Zamiast tego użyj ServerStorage dla wszystkiego, do którego klient nie potrzebuje dostępu.