Questa guida mostra come utilizzare il MicroProfiler per trovare un aspetto problematico di un gioco e identificare la causa principale. Scarica il gioco, Apri da file in Studio e segui le istruzioni.
Identificare il problema
Dopo aver aperto il gioco in Studio, inizia a testarlo con F5 o il pulsante Play.
Il frame rate sembra buono, ma non così fluido come dovrebbe essere per un gioco di questa grandezza e portata. Premi CtrlShiftF5 (⌘ShiftF5) per mostrare il sovrapposizione Riepilogo Prestazioni.

Nota che il frame rate è sotto i 60 frame al secondo (FPS).
Apri il MicroProfiler premendo CtrlAltF6 (⌘⌥F6).

Nota che i tempi dei frame sono consistenti: le barre sono più o meno della stessa altezza, quindi ciò che sta causando il basso frame rate viene eseguito ogni singolo frame anziché di tanto in tanto e causando picchi nel tempo di frame.
Metti in pausa il MicroProfiler premendo CtrlP (⌘P). Mettere in pausa con la scorciatoia da tastiera apre la modalità dettagliata.
Clicca e trascina per panoramizzare il grafico. Nota come un compito particolare nei thread di lavoro sembra utilizzare molto tempo di elaborazione rispetto al thread principale. Passa il mouse su RunService.Stepped e nota quanto tempo ci vuole per renderizzare.

Le barre impilate nella timeline indicano una gerarchia di codice, quindi continua a passare il mouse su livelli sempre più bassi per cercare di identificare il problema.


Nota l'etichetta LocalScript, che indica il nome dello script, e l'etichetta Raycast, che indica che il problema potrebbe essere relativo al raycasting.
Creare etichette di risoluzione dei problemi
Ora che il MicroProfiler ha fornito un punto di partenza, puoi risolvere il codice problematico.
Ferma il test di gioco e filtra la finestra Esplora per localscript per trovare il file.

Una ricerca per raycast indica che questa parte di codice è probabilmente la colpevole delle scarse prestazioni del gioco:
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)In particolare, puoi vedere che il codice sta lanciando 1.500 raggi al secondo in direzioni casuali.
Per verificare che questa parte di codice stia causando il ritardo nel rendering, incapsula i contenuti della funzione con debug.profilebegin() e 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
Confermare e risolvere il problema
Inizia a testare il gioco e apri di nuovo il MicroProfiler.
Nota come il MicroProfiler ora mostra l'etichetta personalizzata, indicando che questa funzione era effettivamente la causa principale.

Ferma il test di gioco.
Elimina o commenta la funzione onStepped() e la connessione RunService.Stepped:Connect(onStepped).
Inizia a testare di nuovo il gioco e controlla di nuovo il Riepilogo Prestazioni.

Nota il notevole miglioramento del frame rate e il corrispondente calo dei tempi di frame nel grafico del MicroProfiler.