Este guia de caminhada mostra como usar o MicroProfiler para encontrar um aspecto problemático de uma experiência e identificar a causa raiz. Baixe a experiência, Abra a partir de Arquivo no Studio e siga.
Identificando o Problema
Depois de abrir a experiência no Studio, comece a testá-la com F5 ou o botão Jogar .
A taxa de quadros se sente decente, mas não tão suave quanto deveria para uma experiência deste tamanho e alcance. Navegue até a aba Ver e clique em Resumo sob Estatísticas.
Nota que a taxa de quadros é inferior a 60 quadros por segundo (FPS).
Abra o MicroProfiler pressionando CtrlAltF6 ( ⌘1> ⌥1> 3> F6 3> ).
Nota que os tempos de quadro são consistentes — as barras são aproximadamente da mesma altura —, então qualquer coisa que esteja causando a baixa taxa de quadros está executando todos os quadros como se fosse um único quadro, em vez de executar ocasionalmente e causar picos de tempo de quadro.
Pause o MicroProfiler pressionando CtrlP ( ⌘P ). Pausando com o atalho de teclado abre 2> modo detalhado2> .
Clique e arraste para panar o gráfico. Observe como uma tarefa particular em seus subprocessos de trabalhador parece estar usando muito tempo de processamento em comparação com o Subprocessoprincipal. Passe o mouse sobre RunService.Stepped e observe quanto tempo está demorando para renderizar.
Barros empilhados na linha do tempo indicam uma hierarquia de código, então mantenha o mouse em camadas mais baixas para tentar identificar o problema.
Observe a LocalScript etiqueta / rótulo, que indica o nome do script e a Raycast etiqueta / rótulo, que indica que o problema pode estar relacionado a raycasting.
Criando Labels de Solução de Problemas
Agora que o MicroProfiler forneceu um ponto de partida, você pode encontrar e solucionar o código problemático.
Pare o teste de jogo e filtre a janela Explorer para localscript encontrar o arquivo.
Uma pesquisa para raycast indica que esta parte do código provavelmente é a culpada pela má performance da experiência:
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)Specificamente, você pode ver que o código está projetando 1.500 raios por segundo em direções aleatórias.
Para verificar se esta trecho de código está causando o atraso de renderização, envolva os conteúdos 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
Confirmando e Corrigindo o Problema
Comece a testar a experiência e abra o MicroProfiler novamente.
Nota como o MicroProfiler agora mostra a etiqueta etiqueta / rótulo, indicando que esta função era realmente 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 a experiência novamente e verifique o resumo das estatísticas de diagnóstico novamente.
Nota a grande melhora na taxa de quadros e na correspondente queda nos tempos de quadro no gráfico MicroProfiler.