Projektowanie pod kątem wydajności

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Projektowanie pod kątem wydajności oznacza stosowanie kilku najlepszych praktyk podczas tworzenia swojej gry. W porównaniu do znajdowania i naprawiania problemów z wydajnością później w procesie tworzenia, projektowanie pod kątem wydajności na wczesnym etapie może zaoszczędzić wiele czasu i wysiłku.

Urządzenia niskiej klasy

Urządzenia niskiej klasy, szczególnie urządzenia mobilne, mają poważne ograniczenia pamięci i są podatne na awarie z powodu błędów OOM (out of memory):

  • Jeśli chcesz wspierać urządzenia o niższej wydajności, wybierz przynajmniej jedno "podstawowe" urządzenie, testuj swoją grę na nim przez cały proces tworzenia i zwracaj szczególną uwagę na liczbę klatek na sekundę oraz wykorzystanie pamięci. Gdy znajdziesz problematyczne obszary w swojej grze, wykorzystaj je do określenia limitów swojego urządzenia.

    Na przykład, możesz przetestować grę z włączonymi statystykami debugowania Render (ShiftF2) i Podsumowanie (ShiftF2). Jeśli liczba klatek na sekundę zacznie spadać w szczególnie zagraconym obszarze, możesz zbadać liczby Rysuj (scena) i określić, że musisz pozostać poniżej 1,000 wywołań rysowania i 1,000,000 trójkątów, aby gra działała dobrze na twoim podstawowym urządzeniu.

    Lub możesz zbadać Konsolę Dewelopera (F9) i zauważyć, że wykorzystanie pamięci jest nieco wysokie, chyba że włączysz streaming. Jasne zrozumienie limitów urządzenia może pomóc Ci pozostać poniżej nich podczas dalszego tworzenia gry.

    Gra Roblox z aktywnymi trzema nakładkami.

  • Emulator urządzenia w Roblox Studio jest przydatny do sprawdzania proporcji ekranu i kontroli, ale nie jest dokładny w zakresie wykorzystania pamięci; gdy testujesz grę w Studio, uruchamia serwer i klienta, więc wykorzystanie pamięci jest znacznie wyższe.

Ogólnie rzecz biorąc, testowanie na różnych urządzeniach może pomóc Ci sprawdzić, czy gra odpowiada twoim oczekiwaniom wizualnym i wydajnościowym na różnych poziomach jakości graficznej. Aby zapoznać się z bardziej szczegółowym przykładem tego, jak możesz myśleć o optymalizacji swojej gry dla urządzeń mobilnych niskiej klasy, zapoznaj się z Optymalizacją budowania i skryptowania w rzeczywistym świecie.

Streaming i teleportacja

  • Streaming instancji pozwala Roblox dynamicznie ładować i odładowywać zawartość 3D i jest doskonałą opcją dla większości miejsc, szczególnie większych. Streaming poprawia czas dołączania, zmniejsza zużycie pamięci i zwiększa liczbę klatek na sekundę.

    Na przykład, gdy włączysz Workspace.EnableSLIMAvatars i ustawisz właściwość LevelOfDetail na SLIM, możesz tworzyć światy z przestrzeniami społecznymi i zatłoczonymi wydarzeniami, które pozostają wizualnie zaludnione, jednocześnie skalując się na szeroką gamę możliwości urządzeń. Aby uzyskać więcej informacji, zobacz SLIM oraz Popraw wydajność.

  • Rozważ podział dużych miejsc na bardziej zarządzalne i użycie teleportacji do przenoszenia graczy między nimi. To podejście może zmniejszyć początkowy czas dołączania, ale narzuca dodatkowe czasy dołączania, gdy gracze teleportują się z miejsca do miejsca. Korzyści z wykorzystania pamięci różnią się w zależności od wielkości miejsca i tego, czy włączyłeś streaming.

    Nawet ignorując kwestie wydajności, możesz stwierdzić, że posiadanie wielu miejsc upraszcza proces deweloperski, zwłaszcza jeśli regularnie dodajesz nową zawartość do swojej gry lub jesteś częścią większego zespołu.

Materiały i duplikacja

  • Wbudowane materiały używają znacznie mniej pamięci niż niestandardowe tekstury, ale mogą nie odpowiadać twojej wizji artystycznej. Staraj się używać materiałów, gdy tylko to możliwe, aby oszczędzać budżet pamięci dla tekstur, które są kluczowe dla twojej gry.

  • Gdy tworzysz zasoby, przekształć je w pakiety. Uczynienie pakietów częścią swojego przepływu pracy pomaga uniknąć powszechnego problemu duplikatów zasobów z różnymi identyfikatorami, co może wpłynąć na wydajność.

  • Gdy dodajesz siatki i tekstury, używaj i ponownie ich wykorzystuj zamiast importować duplikaty. Poprzez zmiany rozmiaru, obracanie i nakładanie, możesz tworzyć bogate, zróżnicowane środowiska, które wymagają bardzo niewielu wywołań rysowania. Aby uzyskać więcej informacji, zobacz Usuń duplikaty tekstur.

Przezroczystość

  • Unikaj wartości przezroczystości innych niż 0 (widoczne) i 1 (niewidoczne). Gdy używasz częściowej przezroczystości, szczególnie ostrożnie unikaj wysokiej przezroczystości.

Skrypty

  • Kiedy tylko to możliwe, pisz kod oparty na zdarzeniach, zamiast obliczeń na każdą klatkę. Przy 60 FPS całkowity budżet na każdą klatkę wynosi 16,67 milisekundy (ms). Nawet pozornie drobne obliczenia na klatkę mogą wykorzystać znaczną część tego budżetu.

  • Szukaj sposobów na podzielenie długotrwałego kodu na zarządzalne fragmenty. Jeśli fragment kodu zajmuje 100 ms do wykonania, a ty uruchamiasz go co klatkę, twoja gra może działać tylko z prędkością 10 FPS. Jeśli zdecydujesz się uruchamiać kod raz na sekundę w grze, która w przeciwnym razie działa z prędkością 60 FPS, 59 twoich klatek przychodzi po 16,67 ms... a potem jedna po 100 ms, co powoduje szarpanie.

    Zamiast tego, zbadaj, jak możesz podzielić kod. Może wykonasz 5 ms pracy na klatkę, użyjesz task.wait() i uzyskasz zakończoną kalkulację co 20 klatek, nadal utrzymując 60 FPS. Wielowątkowość, czasami nazywana równoległym Luau, może również pomóc.

  • Użyj metody RBXScriptConnection:Disconnect(), aby zatrzymać niepotrzebne wywoływanie funkcji przy każdym zdarzeniu.

  • Nie wywołuj tej samej metody za każdym razem, kiedy potrzebujesz wartości. Wywołaj metodę raz, zapisz wartość, a następnie nadpisuj ją później w razie potrzeby.

  • Nie przechowuj wszystkiego w ReplicatedStorage. Klient ładuje wszystko, co znajduje się w tym kontenerze. Zamiast tego użyj ServerStorage dla wszystkiego, do czego klient nie musi mieć dostępu.

©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.