Pesquisar em Unity

O que NÃO fazer em Unity: os erros mais comuns a evitar

Last updated: December 2018

What you’ll get from this page: A guide that you will want to reference throughout your development. Follow these great tips from Unity field engineer Valentin Simonov that will help you set up a smart and efficient development pipeline, and ultimately ship better and more performant content.

Planejamento

The most important part of any software development project because decisions made in the this phase will be difficult to change later on in the development cycle.

Falta de pesquisa antes de iniciar um projeto

  • Verifique se todas as funções planejadas realmente funcionam em todas as plataformas de destino.

The minimally supported devices for your project aren’t specified

  • Define the minimally supported device(s) for your content.
  • Disponibilize-os para as suas equipes de desenvolvimento e de controle de qualidade.
  • Isso permite a você definir um desempenho e um budget realistas.

Os budgets de frames e recursos não são definidos antecipadamente

  • Defina budgets para:
    • modelos - quantos vértices pode renderizar o dispositivo de destino?
    • recursos - que nível de detalhe para modelos e texturas?
    • scripts e renderização - que % do frame você tem para lógica, renderização, efeitos e outros subsistemas?

Mais dicas:

Otimizando o desempenho gráfico

Modelagem de personagens para desempenho otimizado

A decomposição de cena e prefab não é definida de início.

... ou (em outras palavras) todos trabalham na mesma cena.

  • Dividir níveis em cenas (carregadas aditivamente).
  • Mova objetos separados em prefabs e edite-os em cenas separadas.
  • Concordar com o mecanismo de bloqueio da cena principal.

O pipeline de recursos não está bem planejado

Este processo consiste na obtenção de recursos de acordo com as especificações dos artistas no projeto.

  • Se possível, envolva um artista técnico desde o início para definir este processo.
  • Definir diretrizes claras sobre formatos e especificações de recursos.
  • Adicione testes de tempo de importação.

Mais dicas:

Guia de melhores práticas de recursos gráficos

Unity Asset importing

Você não tem um processo de compilação e controle de qualidade alinhado

  • Set up a build machine, or, turn on and set up Unity Teams.
  • Como será publicada uma função na versão compilada?
  • Como são testadas as novas versões?
  • Estes testes são automatizados?
  • As estatísticas são registradas?

Unity setup Cloud Build

O projeto não é iniciado do zero após os protótipos iniciais

After building a prototype and getting it approved by the management, strongly consider starting it from scratch.

  • As decisões tomadas durante o protótipo geralmente favorecem a velocidade.
  • Basear o seu jogo em um monte de hacks não é um bom começo para qualquer projeto.

Unity-best-practices-planning

Desenvolvimento

Práticas incorrectas e erros durante o desenvolvimento retardam toda a equipe e prejudicam a qualidade do produto final.

O controle de versão está configurado incorretamente

  • Use serialização de texto (por padrão no Unity).
  • Set up built-in YAML merge tool. See more about SmartMerge aqui.
  • Set up commit hooks. See more aqui.

O servidor de cache não é usado

Dados estáticos são armazenados em arquivos JSON ou XML

  • Isso resulta em carregamento lento.
  • A análise gera lixo.
  • Instead, for built-in static data use ScriptableObjects with custom editor tools.

O projeto contém recursos não utilizados, plug-ins e bibliotecas duplicadas

Há uma grande chance de que os recursos não utilizados em seu projeto sejam incorporados ao jogo. Certifique-se de não deixar lixo no seu projeto - se você configurar um sistema de controle de versão, a restauração dos arquivos deve ser fácil.

  • Verifique quais dependências os recursos da Asset Store arrastam para o projeto. Você pode se surpreender ao perceber que existem 5 bibliotecas JSON diferentes no projeto.
  • Recursos e scripts desatualizados de protótipos anteriores.
  • The practice of moving old assets to "removed" folder still results in resources and scripts being built into the game.

Ações repetitivas exigem trabalho manual

  • Para cada tarefa repetitiva, deve haver um script que a automatize.
  • Make sure that you can "play" the game or interactive content from any scene.
  • Automate all the steps of build process, so that the application can be built with Cloud Build or locally with a press of a button.

Perfilar seu projeto apenas no Edito

  • Always profile the content on your target device; if you profile in the Editor only, you can miss actual performance bottlenecks.

Unity Profiler

Não usar ferramentas de perfil e de depuração integradas e específicas da plataforma

Mais dicas:

Otimizações gerais de desempenho

Dicas de profiling e otimização de shader

Unity frame debugger

Profiling e otimização são feitos tarde demais no ciclo de desenvolvimento

  • Quanto mais tempo você atrasar o perfil, maior o impacto no desempenho.
  • Comece a perfilar antecipadamente, para ter certeza de que seu projeto se encaixa nos budgets de frame, memória e tamanho de disco.

A otimização não é baseada em dados de teste

  • Certifique-se de otimizar os gargalos reais.
  • Use as ferramentas especificadas acima para coletar dados corretos.

Não há conhecimento suficiente sobre sua(s) plataforma(s) de destino

  • Certifique-se de ter conhecimento suficiente sobre sua(s) plataforma(s) de destino.
  • As plataformas de desktop, dispositivos móveis e console possuem gargalos muito diferentes.

Unity best practices development

Configurações de recursos

Os recursos (modelos, texturas, sons) ocupam a maior parte do tamanho do seu jogo. Um mesh incorreto no projeto pode anular todas as otimizações feitas por seus programadores.

Os atlas de sprite não estão configurados corretamente

  • Use 3rd-party tools (like Texture Packer) to create atlases or group sprites together in Unity. This will reduce the number of draw calls in the game.

As configurações de textura não estão configuradas corretamente

  • Verifique se você conhece as configurações corretas de textura para a plataforma de destino:
    • Qual compressão a plataforma suporta?
    • As texturas precisam de mipmaps?
  • Set up an automated way to apply these settings for new textures using a API AssetPostprocessor as shown by neste projeto
  • Evite que os artistas comprometam texturas com configurações erradas.

Unity Asset import settings

Asset Bundles contêm texturas duplicadas

  • It is easy to make a mistake in setting up Asset Bundles build system. Get good guidelines aqui. It is especially bad for duplicated textures.
  • Use Navegador do Asset Bundle to track dependencies.

Unity best practices asset settings

Programação

Más práticas e erros na arquitetura e desenvolvimento de código resultam em baixa produtividade.

O código é muito abstrato e difícil de seguir

  • O código corporativo abstrato é raramente justificado.
  • Torna o código mais difícil de compreender.
  • Executa-se mais devagar e o IL2CPP precisa gerar mais código.

Convenções arquitetônicas não definidas ou mal documentadas:

  • Evite programar para usar métodos diferentes para realizar a mesma tarefa, por exemplo usando diferentes:
    • Formatos de configuração (arquivos, propriedades, recursos).
    • Eventos (eventos Unity, eventos C#, SendMessage).
  • Qual gerente é responsável por quais objetos?

Não há uma compreensão abrangente dos Frameloops Unity

  • Quando Awake, OnEnable, Update e outros métodos são chamados.
  • Quando as corotinas são atualizadas.
  • Como FixedUpdate é executado.

A lógica de inicialização de script depende da ordem de execução do Unity

  • Ou "simplesmente funciona dessa maneira" ou está abusando da Ordem de Execução de Script.

A framerate não é levada em conta no script de lógica ou animação

  • Use Time.deltaTime para scripts independentes FPS.

Mais dicas:

3 métodos eficazes para criar com Objetos Scriptáveis

Para uma experiência de script melhor

Unity best practices programming

Desempenho da CPU

High CPU usage results in "laggy" gameplay experience and drains the battery faster.

Unity CPU Profiler

Muitos scripts com o método Update()

  • Native -> Managed calls have some overhead. See este post de blog for more details.
  • Em vez disso, use gerenciadores personalizados.

Todos os comportamentos personalizados herdam de uma classe abstrata com métodos definidos de Update/Awake/Start

  • Agora todos os seus scripts possuem o método Update().

Todos os sistemas de jogo são atualizados em cada frame

  • Define how frequently you want to update different systems in your game/content such as:
    • Objetos em movimento.
    • IA e path finding.
    • Registro e preservação do estado do jogo.
    • Other "heavy" systems.

Dados e referências a objetos necessários com frequência não são armazenados em cache

Dados de cache que você precisa com frequência:

  • Reflexão
  • Find()
  • Camera.main
  • GetComponent()

Objetos frequentemente instanciados não são agrupados

  • A instanciação de objetos é lenta.
  • Crie grupos de objetos no início do jogo.
  • Reutilize objetos em vez de criar novos.

A memória é alocada em cada frame

  • Mesmo pequenas alocações em cada frame, mais cedo ou mais tarde, causarão um pico no GC.
  • Tente eliminar TODAS as alocações.

APIs de alocação de memória são usadas em vez de alternativas sem alocação

  • LINQ.
  • Concatenação de strings
  • APIs Unity que geram arrays:
    • Physics.RaycastAll, Mesh.vertices, GetComponents, etc.

Mais dicas:

Trabalhe otimamente com estruturas de dados C# e os API Unity

Unity best practices CPU performance

Desempenho da GPU

High GPU usage results in low framerate, drains battery faster and the game/content is perceived as "running slow".

Unity GPU Profiler

Para dispositivo móvel: o projeto tem muito overdraw

  • As GPUs de dispositivos móveis só podem acessar um número específico de pixels por segundo.
  • Overdraw é um dos maiores gargalos de desempenho em dispositivos móveis.
  • Não desenhe imagens transparentes desnecessárias.
  • Use meshes mais complexos para cortar áreas totalmente transparentes.

Para dispositivos móveis: os shaders são muito complexos

  • Não use Shaders Standard em dispositivos móveis.
  • Crie shaders personalizados especializados.
  • Use versões simplificadas ou desative alguns efeitos para dispositivos básicos.

Muitas luzes dinâmicas são usadas com Forward Rendering

  • Cada luz adiciona um passe de renderização para cada objeto iluminado.

Configurações incorretas no projeto interrompem lotes dinâmicos

  • Objects must be "similar" to be dynamically batched.
  • Frame Debugger mostra por que certos objetos não foram tratados em lotes.

LODs não são usados ou não estão configurados corretamente

  • LODs let rendering further objects take fewer resources

Mais dicas:

Por que seus draw calls não são tratados em lote

Práticas recomendadas para otimização de dispositivos móveis

Unity best practices GPU performance

Desempenho da IU

A IU Unity é uma ferramenta muito intuitiva para artistas gráficos, mas muitas vezes não é configurada corretamente, por isso consome muitos recursos de CPU e GPU.

Unity UI

Diferentes resoluções e proporções não são consideradas

  • Teste a IU em dispositivos com diferentes resoluções e proporções
  • Às vezes é melhor criar diferentes telas de IU para diferentes dispositivos

Elementos animados estão no mesmo Canvas

  • Quando um elemento muda, o Canvas tem que criar um novo mesh combinado
  • Para Canvas complexos pode ser custoso
  • Mover elementos animados para Canvas separados

"Opening" a new window is not optimized

  • Quando uma nova janela ou uma grande parte da IU é criada, há um atraso perceptível no jogo. Você deve minimizar esse efeito.
  • Torne as janelas da IU menos complexas.
  • Divida a IU em partes.
  • Salve janelas no cache.

As listas contêm grande quantidade de elementos

  • Reutilize dinamicamente os elementos da lista em vez de criar todos eles de uma só vez.
  • Crie um Canvas aninhado na lista.
  • Use open source implementations, such as este.

Ver:

Dicas de otimização para IU Unity

Unity best practices UI performance

Mais recursos

Queremos saber! Você gostou deste conteúdo?

Sim, continue. Bem. Poderia ser melhor

Unity Buffbot está aqui para facilitar seu trabalho

Cadastre-se para receber know-how técnico e criativo semanal de especialistas da Unity.

Subscribe
Eu entendi

We use cookies to ensure that we give you the best experience on our website. Visit our cookie policy page for more information.