Projektowanie dla wydajności oznacza przestrzennie kilku najlepszych praktyk podczas budowania swojego doświadczenia. W porównaniu do znalezienia i naprawy problemów wydajności później w procesie rozwoju, projektowanie dla wydajności wcześniej może zbawić cię dużo czasu i wysiłku.
Urządzenia końcowe
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 (błędów OOM):
Jeśli chcesz wspierać urządzenia z niższej półki, wybierz zestaw podstawowych urządzeń z pewnymi cechami wydajności, przetestuj swoją doświadczenie na nich w trakcie procesu rozwoju i zwróć szczególną uwagę na wydajność klatki pamięci i użycie pamięci. Gdy znajdziesz obszary problemu w swoim doświadczeniu, użyj tych obszarów, aby zidentyfikować ograniczenia swoich urządzeń.
Na przykład, możesz przetestować doświadczenie z
Emulator urządzeń w Roblox Studio jest użyteczny do sprawdzenia relacji aspektu i elementy sterujące, ale nie jest dokładny dla użycia pamięci; gdy testujesz doświadczenie w Studio, uruchamia serwer i klient, więc użycie pamięci jest znacznie wyższe.
Dla większości urządzeń testowanie na różnych poziomach jakości grafiki może pomóc Ci sprawdzić, czy doświadczenie zgadza się z Twoimi oczekiwaniami wizualnymi i wydajnością na różnych poziomach jakości grafiki. Dla bardziej szczegółowego przykładu tego, jak możesz myśleć o optymalizacji swojego doświadczenia dla urządzeń mobilnych niskiej klasy, zobacz Optymalizacja rzeczywistego świata i sk
Transmisja i teleportacja
Streaming przypadków umożliwia Robloxowi dynamiczne ładowanie i rozładowywanie treści 3D i jest świetnym wyborem dla większości doświadczeń, szczególnie większych. Streaming poprawia czas dołączenia, zmniejsza pamięć podręczną i zwiększa szybkość klatki. Dla więcej informacji, zobacz Poprawa wydajności.
Rozdziel duże miejsca na bardziej zarządzalne i użyj teleportacji aby przenieść graczy między nimi.
Materiały i duplikacja
Zintegrowane materiały używają znacznie mniej pamięci niż niestandardowe tekstury, ale mogą nie pasować do twojego wizualnego wizja. Spróbuj używać materiałów, gdy to możliwe, aby zachować budżet pamięci dla tekstur, które są centralne dla twojego doświadczenia.
Podczas tworzenia zasobów konwertuj je w pakiety. Tworzenie pakietów jest częścią twojego workflow, aby uniknąć częstego problemu z duplikatami z różnymi ID, co może negatywnie wpłynąć na wykonywanie.
Gdy dodasz sieci i tekstury, użyj i ponownie używaj ich, zamiast importować kopie duplikatów. Przez zmniejszanie, obrót i przeplatanie możesz stworzyć bogate, zróżnicowane środowiska, które wymagają bardzo niewielu wezwywania rysunku. Dla więcej informacji, zobacz Usuń Duplikowane Tekstury .
Przezroczystość
- Unikaj wartości przejrzystości innych niż 0 ( widoczne ) i 1 (niewidoczne). Gdy używasz częściowej przejrzystości, bądź szczególnie ostrożny, aby uniknąć wysokiej przejrzystości nadmiaru .
Skryptowanie
Gdy to możliwe, pisz kod oparty na wydarzeniach, a nie na liczeniach per-frame. W 60 strzelanki FPScałkowity budżet na każdą ramę wynosi 16,67 milisekund (ms). Nawet najmniejsze per-frameowe liczenia mogą używać znacznej części tego budżetu.
Znajdź sposób na zerwanie długiego kodu na zarządzalne kawałki. Jeśli kawałek kodu potrzebuje 100 milisekund na uruchomienie i wykonanie go, a wykonasz go co klatkę, twoje doświadczenie może zostać uruchomione tylko na 10 strzelanki FPS. Jeśli zdecydujesz się zerwać kod tylko raz na sekundę
Zamiast tego zbadaj, jak możesz złamać kod. Może uda ci się wykonać 5 ms pracy na klatkę, użyj task.wait() i mieć ukończoną pracę co 20 klatkę, zachowując 60 strzelanki FPS. Multithreading , czasami nazywany Parallel Luau, może również pomagać.
Użyj metody RBXScriptConnection:Disconnect(), aby zapobiec niepotrzebnemu wzywaniu funkcji w następnym czasie uruchomienia wydarzenia.
Nie wzywaj tego samego metody za każdym razem, gdy potrzebujesz wartości. Zadzwoń metodę raz, zapisz wartość i potem ponownie wymierz ją, jeśli to wymagane.
Nie przechowywaj wszystkiego w ReplicatedStorage . Klient ładowa wszystko, co jest w tym kontenerze. Zamiast tego użyj ServerStorage dla wszystkiego, co klient nie ma dostępu.