Ten przewodnik pokazuje, jak używać MicroProfilera do znalezienia problematycznego aspektu gry i zidentyfikowania jego przyczyny. Pobierz grę, Otwórz z pliku w Studio i postępuj zgodnie z instrukcjami.
Zidentyfikuj problem
Po otwarciu gry w Studio rozpocznij testowanie za pomocą F5 lub przycisku Play.
Częstość klatek wydaje się być przyzwoita, ale nie tak płynna, jak powinna być dla gry o takim rozmiarze i zasięgu. Naciśnij CtrlShiftF5 (⌘ShiftF5), aby wyświetlić nakładkę Podsumowanie wydajności.

Zauważ, że częstotliwość klatek spada poniżej 60 klatek na sekundę (FPS).
Otwórz MicroProfilera, naciskając CtrlAltF6 (⌘⌥F6).

Zauważ, że czasy klatek są spójne—słupki są mniej więcej tej samej wysokości—więc cokolwiek powoduje niską częstotliwość klatek, działa w każdej klatce, a nie sporadycznie, co powodowałoby skoki czasów klatek.
Wstrzymaj MicroProfilera, naciskając CtrlP (⌘P). Wstrzymanie za pomocą skrótu klawiaturowego otwiera tryb szczegółowy.
Kliknij i przeciągnij, aby przesunąć wykres. Zauważ, jak jedno konkretne zadanie w wątkach roboczych wydaje się zużywać dużo czasu procesora w porównaniu z głównym wątkiem. Najedź na RunService.Stepped i zauważ, jak długo trwa renderowanie.

Złożone słupki w harmonogramie wskazują hierarchię kodu, więc kontynuuj najazd na coraz niższe warstwy, aby spróbować zidentyfikować problem.


Zauważ etykietę LocalScript, która wskazuje nazwę skryptu, oraz etykietę Raycast, która wskazuje, że problem może być związany z raycastingiem.
Utwórz etykiety do rozwiązywania problemów
Teraz, gdy MicroProfiler dostarczył punkt wyjścia, możesz rozwiązać problematyczny kod.
Zatrzymaj test gry i przefiltruj okno Eksploratora według localscript, aby znaleźć plik.

Wyszukiwanie raycast wskazuje, że ta część kodu prawdopodobnie jest winowajcą słabej wydajności gry:
local RAYS_PER_SECOND = 1500local function onStepped()for _ = 1, RAYS_PER_SECOND dolocal startPosition = getRandomPosition()local endPosition = getRandomPosition()local direction = endPosition - startPositionWorkspace:Raycast(startPosition,endPosition)endendRunService.Stepped:Connect(onStepped)W szczególności widać, że kod rzuca 1 500 promieni na sekundę w losowych kierunkach.
Aby potwierdzić, że ta część kodu powoduje opóźnienie w renderowaniu, otocz zawartość funkcji debug.profilebegin() i debug.profileend():
local function onStepped()debug.profilebegin("Raycast Spam")for _ = 1, RAYS_PER_SECOND dolocal startPosition = getRandomPosition()local endPosition = getRandomPosition()local direction = endPosition - startPositionWorkspace:Raycast(startPosition,endPosition)enddebug.profileend()end
Potwierdź i napraw problem
Rozpocznij ponownie testowanie gry i otwórz MicroProfilera.
Zauważ, jak MicroProfiler teraz pokazuje niestandardową etykietę, wskazując, że ta funkcja była faktycznie przyczyną problemu.

Zatrzymaj test gry.
Usuń lub zakomentuj funkcję onStepped() oraz połączenie RunService.Stepped:Connect(onStepped).
Ponownie rozpocznij testowanie gry i sprawdź ponownie Podsumowanie wydajności.

Zauważ ogromną poprawę częstotliwości klatek i odpowiadający spadek czasów klatek na wykresie MicroProfilera.