Essas dicas atendem melhor aos usuários que têm alguma experiência anterior com o conjunto de ferramentas 2D do Unity. Outro excelente recurso para criadores profissionais que desenvolvem jogos 2D comerciais com Unity é nosso e-book, arte de jogo 2D, iluminação e animação.
Se você é novo no desenvolvimento de jogos 2D com Unity, comece com o guia 2D para novos usuários.
Aqui estão algumas dicas gerais de desempenho a serem consideradas:
- Pense no desempenho dos seus ativos (os dados) desde o início. Se esses elementos não apresentarem desempenho, há pouco que você possa fazer posteriormente para otimizar seu código.
- Perfil em seu dispositivo de destino mais barato disponível. Use o Unity Profiler em todo o desenvolvimento do seu projeto, juntamente com ferramentas de criação de perfil específicas da plataforma, como o Xcode para dispositivos iOS.
- Não use mais de um terço da RAM disponível no seu dispositivo de destino mais básico. Isso garante que seu conteúdo funcione bem em uma ampla variedade de dispositivos móveis (telefones Android baratos continuam a ser os mais populares nos mercados móveis).
Para obter mais dicas de otimização 2D, consulte estes recursos:
O componente Tilemap permite criar níveis 2D com eficiência usando blocos em uma sobreposição de grade. Compreende uma série de elementos, incluindo:
Você pode criar níveis 2D usando uma combinação de Sprites e GameObjects e controlar propriedades como Classificação de camadas, Tilemap Colliders e Animated Tiles, entre outras. Você também pode pintar SpritesQuadrados, Hexagonaise Isométricos.
Pinte seus níveis com o Tilemap, para que o componente Tilemap Collider 2D gere automaticamente um Collider em torno dos Tiles (com base na configuração do Tile's Collider Type), quando aplicado a um Tilemap GameObject.
Vejamos os ganhos de desempenho dos quais você se beneficia com o Tilemap em comparação com cenas construídas com Sprites.
O uso do Tilemap reduz o tempo de carregamento, bem como o uso de memória e CPU.
Se você já desenvolveu jogos e aplicativos 2D antes, sabe que pode acabar com um grande número de Sprites em seu jogo, todos eles como GameObjects separados. Existem componentes em cada um desses GameObjects Sprite, incluindo um Transform e um Renderer, que ocupam memória. Outros componentes, como Colliders, vêm com sobrecarga de CPU.
Em comparação, um Tilemap usa um Renderizador para todo o mapa e todos os seus blocos. Isso resulta em menos sobrecarga porque ele lida apenas com suas próprias estruturas de dados, em comparação com várias estruturas de dados na memória.
Ter menos GameObjects resulta em uma hierarquia mais limpa, o que significa que você não terá que percorrer uma lista complexa tentando encontrar o que precisa.
Unity Tilemap reduz o tamanho da cena. Ter menos GameObjects e componentes significa menos objetos para carregar do disco, desserializar e manter na memória em tempo de execução.
Carregar cenas no Unity é um processo de duas partes: Primeiro, os dados são lidos do disco. Este é o processo que geralmente leva mais tempo no jogo, especialmente em dispositivos Android. Em seguida, os dados são desserializados. A desserialização é o processo de transformação de dados de um formato para outro. Essencialmente, ele restaura dados e objetos de um estado salvo. O Unity faz a serialização internamente para que sempre que carregar um arquivo de cena no Editor e em tempo de execução, ele pegue esses arquivos salvos e os transforme em objetos do Unity.
Na imagem acima, você pode ver uma comparação entre dois arquivos de cena serializados, um que usa Tilemaps e outro que é recriado usando Sprites. Obrigado ao Pixel Reign por esta cena do jogo Robbie Swifthand.
À direita está uma seção de um Tilemap serializado, composto por quatro blocos. As regras para todas as peças, incluindo o tipo de peças usadas, são definidas na parte superior do Tilemap. Cada um dos blocos seguintes apresenta propriedades como o bloco usado e sua posição.
À esquerda está um Sprite, com componentes Transform e Sprite Renderer.
Fica claro nesta comparação quanto trabalho a serialização do Sprite tem que realizar. Em particular, a cena usando Sprites possui 370.000 linhas em seu arquivo, enquanto a cena com Tilemaps possui 30.000 linhas. Tamanhos menores de projetos e repositórios resultam em tempos de iteração mais rápidos e fluxos de trabalho mais suaves.
Se você deseja visualizar suas próprias cenas como um arquivo de texto, vá para as configurações do Editor, ative o modo de serialização de ativos, clique em Forçar textoe abra o arquivo de cena .unity no Editor de texto.
Você pode combinar o Tilemap Collider 2D com o Composite Collider. Isso não apenas reduzirá o número de Colliders e Sprites, mas também trará mais eficiência à sua produção, porque não há necessidade de reconstruir formas complexas de colisão sempre que você fizer uma alteração. O Composite Collider cuida disso.
Conforme mencionado anteriormente, cada Sprite possui um componente Sprite Renderer, e ter mais renderizadores requer mais trabalho da CPU, incluindo tempo para preparação de seleção e limpeza para renderização. Ao usar Tilemaps, você terá menos componentes do Renderer, economizando algum trabalho da CPU.
Mais de uma câmera em sua cena significa mais renderizadores. Isso aumenta o custo de abate.
Na visualização da câmera, há um custo por renderizador e por câmera para seleção. Cada câmera precisa realizar verificações de seleção em cada componente do Renderizador na cena, portanto, se você tiver uma configuração de várias câmeras para o seu jogo, o uso de Tilemaps o ajudará a reduzir esse custo.
Batching é reunir toda a geometria que pode ser desenhada, sem fazer outra chamada SetPass. O Tilemap Renderer agrupa a geometria dos Sprites com base em sua posição. O resultado é que o Tilemap Renderer envia menos malhas com mais geometria para o pipeline de renderização, em comparação com o Sprite Renderer, que envia mais malhas com menos geometria. Como mostra a tabela na seção a seguir, a cena baseada em Tilemap tem significativamente menos lotes.
Você pode verificar o lote olhando o painel de estatísticas na visualização do jogo. Você também pode usar o Frame Debugger para determinar por que os itens não estão em lote.
Para atingir 60 fps, cada quadro pode levar no máximo 16 ms para ser renderizado. Quando a cena de amostra foi traçada em um iPhone 7 antigo, a versão baseada em Sprite tinha 244 ms por quadro, enquanto a versão Tilemap tinha 13 ms por quadro.
Finalmente, o uso de RAM foi de 1,1 GB com a cena baseada em Sprite, o que é demais para telefones Android de baixo custo, por exemplo. A cena baseada no Tilemap usava apenas 21 MB de RAM, tornando-a adequada para execução em uma ampla variedade de dispositivos móveis.
A comparação acima mostra a clara diferença de desempenho entre as duas cenas.
Sprite Atlas é a ferramenta Editor que permite empacotar seus Sprites em texturas para otimizar o uso de memória e desenhar chamadas. Crie um Sprite Atlas Asset que inclua todos os sprites usados em seu Tilemap para que possam ser agrupados pelo Tilemap Renderer em apenas uma chamada de desenho (desde que todos os Sprites caibam em uma única textura).
Aprimore suas habilidades em 2D Nossa lista de leitura do blog fornece dicas úteis para o desenvolvimento de jogos 2D.
Arte de jogo 2D, animação e iluminação para artistas Este e-book gratuito fornece práticas recomendadas para aproveitar ao máximo o conjunto de ferramentas 2D do Unity.
Visão geral das ferramentas 2D: Confira nossa visão geral útil do que o Unity tem a oferecer aos desenvolvedores 2D.
Padrões processuais com Tilemaps – Parte I e Parte II: Adicione diversidade ao seu jogo com geração processual. Estas postagens explicam alguns dos algoritmos que você pode usar com Tilemap e RuleTile.