Design para desempenho

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Projetar para desempenho significa seguir um punhado de melhores práticas enquanto você constrói seu jogo. Comparado a encontrar e corrigir problemas de desempenho mais tarde no processo de desenvolvimento, projetar para desempenho desde o início pode economizar muito tempo e esforço.

Dispositivos de baixo desempenho

Dispositivos de baixo desempenho, especialmente dispositivos móveis, têm severas limitações de memória e são suscetíveis a travamentos devido a erros de falta de memória (OOM):

  • Se você quiser dar suporte a dispositivos de baixo desempenho, escolha pelo menos um dispositivo "base", teste seu jogo nele durante todo o processo de desenvolvimento e preste atenção especial na taxa de quadros e no uso de memória. À medida que você encontra áreas problemáticas em seu jogo, use essas áreas para identificar os limites do seu dispositivo.

    Por exemplo, você pode testar um jogo com as estatísticas de depuração Render (ShiftF2) e Summary (ShiftF2) ativadas. Se a taxa de quadros começar a cair em uma área particularmente lotada, você pode examinar os números de Draw (cena) e determinar que precisa ficar abaixo de 1.000 chamadas de desenho e 1.000.000 triângulos para que o jogo funcione bem no seu dispositivo base.

    Ou você pode examinar o Console do Desenvolvedor (F9) e notar que o uso da memória está um pouco alto, a menos que você ative streaming. Ter uma compreensão clara dos limites do dispositivo pode ajudar você a ficar abaixo deles enquanto continua a construir seu jogo.

    Um jogo Roblox com três sobreposições ativas.

  • O emulador de dispositivos no Roblox Studio é útil para verificar a relação de aspecto e os controles, mas não é preciso para o uso da memória; quando você testa um jogo no Studio, ele executa o servidor e o cliente, então o uso de memória é significativamente maior.

Mais geralmente, testar em uma variedade de dispositivos pode ajudá-lo a verificar se o jogo corresponde às suas expectativas visuais e de desempenho em diferentes níveis de qualidade gráfica. Para um exemplo muito mais detalhado de como você pode pensar em otimizar seu jogo para dispositivos móveis de baixo desempenho, veja Real World Building and Scripting Optimization.

Streaming e teleporte

  • Streaming de instâncias permite que o Roblox carregue e descarregue dinamicamente conteúdo 3D e é uma ótima opção para a maioria dos lugares, especialmente os maiores. O streaming melhora os tempos de entrada, reduz a pegada de memória e aumenta a taxa de quadros.

    Por exemplo, quando você ativa Workspace.EnableSLIMAvatars e define a propriedade LevelOfDetail de seus modelos de mundo para SLIM, você pode criar mundos com espaços sociais e eventos lotados que permanecem visualmente povoados enquanto escalam em uma ampla gama de capacidades de dispositivo. Para mais informações, veja Melhore o desempenho.

  • Considere dividir lugares grandes em lugares mais gerenciáveis e usar teleporte para mover jogadores entre eles. Essa abordagem pode reduzir os tempos de entrada inicial, mas impõe tempos de entrada adicionais à medida que os jogadores se teleportam de lugar para lugar. Os benefícios em termos de uso de memória variam dependendo do tamanho do lugar e se você ativou o streaming.

    Mesmo ignorando considerações de desempenho, você pode descobrir que ter múltiplos lugares simplifica o processo de desenvolvimento, especialmente se você adicionar conteúdo novo regularmente ao seu jogo ou fizer parte de uma equipe maior.

Materiais e duplicação

  • Materiais incorporados usam muito menos memória do que texturas personalizadas, mas podem não corresponder à sua visão artística. Tente usar materiais sempre que possível para conservar o orçamento de memória para as texturas que são centrais para o seu jogo.

  • À medida que você cria ativos, converta-os em pacotes. Fazer dos pacotes parte do seu fluxo de trabalho ajuda a evitar o problema comum de ativos duplicados com IDs diferentes, que pode prejudicar o desempenho.

  • Ao adicionar malhas e texturas, use e reutilize-as em vez de importar cópias duplicadas. Redimensionando, rotacionando e sobrepondo, você pode criar ambientes ricos e variados que exigem muito poucas chamadas de desenho. Para mais informações, veja Remover texturas duplicadas.

Transparência

Programação

  • Sempre que possível, escreva código orientado a eventos em vez de cálculos por quadro. A 60 FPS, o orçamento total para cada quadro é de 16,67 milissegundos (ms). Mesmo cálculos por quadro que parecem menores podem usar uma parte significativa desse orçamento.

  • Encontre maneiras de dividir códigos que demoram muito para executar em pedaços gerenciáveis. Se um pedaço de código leva 100 ms para ser executado e você o executa a cada quadro, seu jogo só pode rodar a 10 FPS. Se você decidir executar o código apenas uma vez por segundo em um jogo que, de outra forma, roda a 60 FPS, 59 de seus quadros chegam após 16,67 ms... e então um após 100 ms, o que causa uma aceleração abrupta.

    Em vez disso, investigue como você pode dividir o código. Talvez você possa realizar 5 ms de trabalho por quadro, usar task.wait() e ter o cálculo concluído a cada 20 quadros, mantendo ainda 60 FPS. Multithreading, às vezes chamado de Parallel Luau, também pode ajudar.

  • Use o método RBXScriptConnection:Disconnect() para evitar que funções sejam chamadas desnecessariamente na próxima vez que um evento for disparado.

  • Não chame o mesmo método toda vez que precisar de um valor. Chame o método uma vez, armazene o valor e então sobrescreva-o posteriormente conforme necessário.

  • Não armazene tudo em ReplicatedStorage. O cliente carrega tudo que está neste contêiner. Em vez disso, use ServerStorage para qualquer coisa que o cliente não precise acessar.

©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.