
Este é o primeiro de uma série de artigos que descompacta dicas de otimização para seus projetos Unity. Use-os como um guia para rodar em taxas de quadros mais altas com menos recursos. Depois de experimentar essas melhores práticas, não se esqueça de conferir as outras páginas da série:
Veja nossos últimos guias de otimização para desenvolvedores e artistas do Unity 6:
Um pipeline de ativos bem otimizado pode acelerar os tempos de carregamento, reduzir o uso de memória e melhorar o desempenho em tempo de execução. Ao trabalhar com um artista técnico experiente, sua equipe pode definir e impor formatos de ativos, especificações e configurações de importação para garantir um fluxo de trabalho eficiente e simplificado.
Não confie apenas nas configurações padrão. Aproveite a guia de substituição específica da plataforma para otimizar ativos como texturas, geometria de malha e arquivos de áudio. Configurações incorretas podem resultar em tamanhos de build maiores, tempos de build mais longos e uso de memória ruim.
Considere usar Predefinições para estabelecer configurações básicas adaptadas às necessidades específicas do seu projeto. Essa abordagem proativa ajuda a garantir que os ativos sejam otimizados desde o início, levando a um melhor desempenho e uma experiência mais consistente em todas as plataformas.
Para mais orientações, consulte as melhores práticas para ativos artísticos ou explore o curso Otimização de Arte 3D para Aplicativos Móveis no Unity Learn. Esses recursos fornecem insights valiosos que podem ajudá-lo a tomar decisões informadas sobre a otimização de ativos para builds da web Unity, móveis e aplicações XR.

Nas configurações de Player, desative Auto Graphics API para plataformas não suportadas para evitar a geração de variantes excessivas de shader. Desative Arquiteturas de Destino para CPUs mais antigas se seu aplicativo não as suportar.
Nas configurações de Qualidade, desative níveis de Qualidade desnecessários.
Saiba mais sobre a API Gráfica.

Mudar o backend de script de Mono para IL2CPP (Linguagem Intermediária para C++) pode proporcionar um desempenho geral melhor em tempo de execução. No entanto, isso também pode aumentar os tempos de construção. Alguns desenvolvedores preferem usar Mono localmente para iteração mais rápida, e depois mudar para IL2CPP para máquinas de construção e/ou candidatos a lançamento. Consulte a documentação sobre otimização de tempos de construção do IL2CPP para mais informações sobre como reduzir seus tempos de construção.
Observação: Ao usar esta opção, o Unity converte o código IL de scripts e assemblies para C++ antes de criar um arquivo binário nativo (.exe, .apk, .xap) para sua plataforma de destino.
Veja a Introdução aos internos do IL2CPP ou consulte a página do manual de opções do compilador para aprender como as várias opções do compilador afetam o desempenho em tempo de execução.
Projetos móveis devem equilibrar taxas de quadros com duração da bateria e estrangulamento térmico. Em vez de forçar os limites do seu dispositivo a 60 fps, considere rodar a 30 fps como um compromisso. O Unity padrão é 30 fps para dispositivos móveis.
Ao direcionar plataformas XR, as considerações de taxa de quadros são ainda mais críticas. Uma taxa de quadros de 72 fps, 90 fps ou até mesmo 120 fps é frequentemente necessária para manter a imersão e prevenir o enjoo. Essas taxas de quadros mais altas ajudam a garantir uma experiência suave e responsiva, o que é crucial para o conforto em ambientes de VR. No entanto, isso traz seus próprios desafios em termos de consumo de energia e gerenciamento térmico, particularmente em headsets VR autônomos.
Escolher a taxa de quadros certa é entender as demandas e restrições específicas da sua plataforma de destino, seja um dispositivo móvel, um headset VR autônomo ou um dispositivo AR. Ao selecionar cuidadosamente uma taxa de quadros apropriada, você pode otimizar tanto o desempenho quanto a experiência do usuário em diferentes plataformas.
Você também pode ajustar a taxa de quadros dinamicamente durante a execução com Application.targetFrameRate. Por exemplo, você pode cair abaixo de 30 fps para cenas lentas ou relativamente estáticas e reservar configurações de fps mais altas para o gameplay.
Mais informações estão disponíveis na documentação.
Unity agrupa o acelerômetro do seu dispositivo móvel várias vezes por segundo. Desative isso se não estiver sendo usado em sua aplicação, ou reduza sua frequência para um melhor desempenho geral.
Saiba mais sobre o acelerômetro.

Divida suas hierarquias. Se seus GameObjects não precisam estar aninhados em uma hierarquia, simplifique a hierarquia de pais.
Hierarquias menores se beneficiam do multithreading para atualizar os Transforms em sua cena. Hierarquias complexas incurram em cálculos desnecessários de Transform e mais custo para a coleta de lixo.
Veja Otimização da Hierarquia e esta palestra Unite para dicas sobre Transforms.
Considere esses dois exemplos acima usando o mesmo modelo e textura. As configurações à esquerda consomem quase 26 vezes mais memória do que as à direita, sem muita melhoria na qualidade visual.
Use Compressão de Textura Escalável Adaptativa (ATSC) para dispositivos móveis, XR e a web. A grande maioria dos jogos em desenvolvimento tende a direcionar dispositivos de especificação mínima que suportam compressão ATSC.
As únicas exceções são:
Se formatos compactados como PVRTC e ETC não forem suficientemente de alta qualidade, e se ASTC não for totalmente suportado na sua plataforma de destino, tente usar texturas de 16 bits em vez de texturas de 32 bits.
Consulte o manual para mais informações sobre formato de compressão de textura recomendado por plataforma.

Texturas podem potencialmente usar recursos excessivos, então otimizar suas Configurações de Importação é crítico. Em geral, tente seguir estas diretrizes:
Saiba mais sobre Configurações de Importação de Textura.
Atlasing é o processo de agrupar várias texturas menores em uma única textura maior. Atlas de Texturas reduz o uso de memória e requer menos chamadas de desenho, diminuindo assim o esforço exigido pela GPU.
Combine texturas e remapeie UVs para qualquer geometria 3D que não requer mapas de alta resolução. Um editor visual lhe dá a capacidade de definir e priorizar os tamanhos e posições no Atlas de Textura ou Folha de Sprites.
O Texture Packer consolida os mapas individuais em uma grande textura. Unity pode então emitir uma única chamada de desenho para acessar as texturas empacotadas com uma sobrecarga de desempenho menor.
Leia mais sobre Atlas de Sprites aqui.

Modelos de maior resolução significam mais uso de memória e potencialmente mais tempo de GPU. Sua geometria de fundo precisa de meio milhão de polígonos? Considere reduzir modelos em seu pacote DCC de escolha. Exclua polígonos invisíveis do ponto de vista da câmera e use texturas e mapas normais para detalhes finos em vez de malhas de alta densidade.

Assim como texturas, malhas podem consumir memória significativa, então escolha configurações de importação otimizadas para elas. Reduza a pegada de memória das malhas com as seguintes práticas:
Desativar normais e tangentes: Se você tiver certeza absoluta de que o material da malha não precisará de normais ou tangentes, desmarque essas opções para economizar ainda mais.

Opções adicionais de otimização de malha estão disponíveis nas Configurações do Player:
Ao automatizar o processo de auditoria, você pode evitar alterar acidentalmente as configurações do ativo. O AssetPostProcessor pode ajudá-lo a padronizar suas Configurações de Importação ou analisar ativos existentes. Ele permite que você execute scripts ao importar ativos e, essencialmente, solicita que você personalize as configurações antes e/ou depois de importar modelos, texturas, áudio e mais.
Leia mais sobre Auditoria de ativos no Guia de compreensão de otimização.
Unity usa um buffer circular para enviar texturas para a GPU. Você pode ajustar manualmente esse buffer de textura assíncrono via QualitySettings.asyncUploadBufferSize.
Se a taxa de upload for muito lenta ou a thread principal travar enquanto carrega várias texturas ao mesmo tempo, ajuste esses buffers de textura. Você geralmente pode definir o valor (em MB) para o tamanho da maior textura que precisa carregar na cena.
Lembre-se de que mudar os valores padrão pode levar a uma alta pressão de memória. Além disso, você não pode devolver a memória do buffer circular ao sistema após o Unity alocá-la. Se a memória da GPU sobrecarregar, a GPU descarrega a textura mais recente e menos utilizada, e força a CPU a reenvia-la na próxima vez que entrar no frustum da Câmera.
Explore todas as restrições de memória para buffers de textura no tutorial de gerenciamento de memória, e consulte Otimização do desempenho de carregamento para ver como você pode melhorar os tempos de carregamento.
O sistema Streaming de Mip Map dá a você controle sobre quais níveis de Mip Map devem ser carregados na memória. Ative-o indo para as configurações de Qualidade do Unity (Editar > Configurações do Projeto > Qualidade) e marque a opção Streaming de Textura. Você pode ativar Streaming de Mip Maps nas Configurações de Importação de Textura em Avançado.
Esse sistema reduz a quantidade total de memória necessária para texturas porque carrega apenas os Mip Maps necessários para renderizar a posição atual da Câmera. Caso contrário, o Unity carrega todas as texturas por padrão.
O Streaming de Textura troca uma pequena quantidade de recursos da CPU para economizar uma quantidade potencialmente grande de memória da GPU. Ele também reduz automaticamente os níveis de Mip Map para permanecer dentro do Orçamento de Memória definido pelo usuário.
Você pode usar a API de Streaming de Mip Map para mais controle.

O Addressable Asset System fornece uma maneira simplificada de gerenciar seu conteúdo. Este sistema unificado carrega AssetBundles por "endereço" ou alias, de forma assíncrona a partir de um caminho local ou de uma rede de entrega de conteúdo (CDN) remota.
Se você dividir seus ativos não relacionados a código (modelos, texturas, Prefabs, áudio e até mesmo cenas inteiras) em um AssetBundle, você pode separá-los como conteúdo para download (DLC).
Em seguida, use Addressables para criar uma build inicial menor para seu aplicativo móvel. Cloud Content Delivery permite que você hospede e entregue o conteúdo do seu jogo aos jogadores à medida que eles progridem no jogo.
Veja o tutorial Get started with Addressables no Unity Learn para uma visão rápida de como o Addressable Asset System pode funcionar em seu projeto.
E clique here para ver como o Addressable Asset System pode facilitar o gerenciamento de ativos.


Encontre mais melhores práticas e dicas para desenvolvedores e criadores avançados da Unity no hub de melhores práticas da Unity. Escolha entre mais de 30 guias, criadas por especialistas da indústria, engenheiros e artistas técnicos da Unity, que ajudarão você a desenvolver de forma eficiente com as ferramentas e sistemas da Unity.