Este guia mostra como usar o MicroProfiler para encontrar um aspecto problemático de um jogo e identificar a causa raiz. Baixe o jogo, Abrir a partir do arquivo no Studio e siga junto.
Identificar o problema
Depois de abrir o jogo no Studio, comece a testá-lo com F5 ou o botão Jogar.
A taxa de quadros parece razoável, mas não tão suave quanto deveria para um jogo desse tamanho e escopo. Pressione CtrlShiftF5 (⌘ShiftF5) para mostrar a sobreposição Resumo de Desempenho.

Note que a taxa de quadros está abaixo de 60 quadros por segundo (FPS).
Abra o MicroProfiler pressionando CtrlAltF6 (⌘⌥F6).

Note que os tempos de frame são consistentes—as barras são aproximadamente da mesma altura—portanto, qualquer que seja a causa da baixa taxa de quadros, está executando em cada frame em vez de ocasionalmente e causando picos de tempo de frame.
Pause o MicroProfiler pressionando CtrlP (⌘P). Pausar com o atalho do teclado abre o modo detalhado.
Clique e arraste para mover o gráfico. Note como uma tarefa específica nas threads de trabalho parece estar usando muito tempo de processamento em comparação com a thread principal. Passe o mouse sobre RunService.Stepped e note quanto tempo está levando para renderizar.

Barras empilhadas na linha do tempo indicam uma hierarquia de código, então continue passando o mouse sobre camadas cada vez mais baixas para tentar identificar o problema.


Note o rótulo LocalScript, que indica o nome do script, e o rótulo Raycast, que indica que o problema pode estar relacionado ao raycasting.
Criar rótulos de solução de problemas
Agora que o MicroProfiler forneceu um ponto de partida, você pode solucionar o código problemático.
Pare o teste de jogo e filtre a janela Explorer por localscript para encontrar o arquivo.

Uma busca por raycast indica que essa parte do código é provavelmente a culpada pelo mau desempenho do jogo:
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)Especificamente, você pode ver que o código está lançando 1.500 raios por segundo em direções aleatórias.
Para verificar se essa parte do código está causando o atraso na renderização, envolva o conteúdo da função com 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
Confirmar e corrigir o problema
Comece a testar o jogo e abra o MicroProfiler novamente.
Note como o MicroProfiler agora mostra o rótulo personalizado, indicando que essa função foi de fato a causa raiz.

Pare o teste de jogo.
Exclua ou comente a função onStepped() e a conexão RunService.Stepped:Connect(onStepped).
Comece a testar o jogo novamente e verifique o Resumo de Desempenho novamente.

Note a enorme melhoria na taxa de quadros e a correspondente queda nos tempos de frame no gráfico do MicroProfiler.