Questo tour mostra come utilizzare il MicroProfiler per trovare un aspetto problematico di un'esperienza e identificare la causa radice.Download the experience, Apri dal File in Studio, e segui.
Identifica il problema
Dopo aver aperto l'esperienza in Studio, inizia a testarla con F5 o il pulsante Gioca .
La frequenza fotogrammi si sente decente, ma non così liscia come dovrebbe essere per un'esperienza di questa dimensione e portata.Passa alla scheda Visualizza e clicca Sommario sotto Statistiche.
Nota che il tasso di fotogrammi è inferiore a 60 fotogrammi al secondo (FPS).
Apri il MicroProfiler premendo CtrlAltF6 ( ⌘⌥F6 ).
Nota che i tempi del frame sono coerenti —le barre sono approssimativamente della stessa altezza— quindi tutto ciò che causa il basso tasso di frame è in esecuzione ogni singolo frame a differenza di eseguire occasionalmente e causare picchi di tempo del frame.
Interrompi il MicroProfiler premendo CtrlP ( ⌘P ).La pausa con il scorciatoia della tastiera apre modo dettagliato.
Fai clic e trascina per spostare il grafico.Nota come un particolare compito nei thread lavoratore sembri utilizzare un sacco di tempo di elaborazione rispetto al Filoprincipale.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 sugli strati inferiori e inferiori per cercare di identificare il problema.
Nota l'EtichettaLocalScript, che indica il nome dello script, e l'EtichettaRaycast, che indica che il problema potrebbe essere legato al raycasting.
Crea etichette di risoluzione dei problemi
Ora che il MicroProfiler ha fornito un punto di partenza, puoi risolvere il codice problematico.
Interrompi il test di riproduzione e filtra la finestra Explorer per localscript per trovare il file.
Una ricerca per raycast indica che questa porzione di codice è probabilmente il colpevole della cattiva Prestazionedell'esperienza:
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 del codice sta causando il ritardo di rendering, avvolgi 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
Conferma e risolvi il problema
Inizia a testare l'esperienza e riapri il MicroProfiler.
Nota come il MicroProfiler ora mostra l'Etichetta, indicando che questa funzione era effettivamente la causa radice.
Interrompi il test di gioco.
Elimina o commenta la funzione onStepped() e la connessione RunService.Stepped:Connect(onStepped).
Ricomincia a testare l'esperienza e controlla di nuovo il riepilogo delle statistiche di debug.
Nota l'enorme miglioramento della velocità del fotogramma e del conseguente calo dei tempi del fotogramma sul grafico del MicroProfiler.