O que você está procurando?
Hero background image

Otimize o desempenho de jogos 2D com Tilemap do Unity

Obtenha dicas para melhorar o desempenho dos seus jogos 2D e aplicativos móveis com o Unity Tilemap. Os tópicos abordados aqui incluem tamanho de cena, serialização, sobrecarga do renderizador e batching.
Esta página da Web foi automaticamente traduzida para sua conveniência. Não podemos garantir a precisão ou a confiabilidade do conteúdo traduzido. Se tiver dúvidas sobre a precisão do conteúdo traduzido, consulte a versão oficial em inglês da página da Web.

Essas dicas atendem melhor aos usuários que têm alguma experiência prévia com o conjunto de ferramentas 2D do Unity. Outro ótimo recurso para criadores profissionais que desenvolvem jogos 2D comerciais com o Unity é nosso e-book, arte de jogo 2D, iluminação e animação.

Se você é novo no desenvolvimento de jogos 2D com o Unity, comece com o guia 2D para novos usuários.

Captura de tela do editor do Unity
UMA IMAGEM DO PROJETO 2D DO UNITY LOST CRYPT

Dicas gerais de desempenho

Aqui estão algumas dicas gerais de desempenho a considerar:

  • Pense sobre o desempenho dos seus ativos (os dados) desde o início. Se esses elementos não forem eficientes, há pouco que você pode fazer depois para otimizar seu código.
  • Profile no seu dispositivo alvo de menor desempenho disponível. Use o Profiler do Unity durante o desenvolvimento do seu projeto, juntamente com ferramentas 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 alvo de menor desempenho. Isso garante que seu conteúdo funcione bem em uma ampla gama de dispositivos móveis (os smartphones Android mais baratos continuam sendo os mais populares nos mercados móveis).

Para mais dicas de otimização 2D, veja esses recursos:

Unity - Crie níveis 2D rapidamente com o Tilemap
EXEMPLO DE TILEMAP

Uma breve introdução ao Tilemap

O componente Tilemap permite que você crie níveis 2D de forma eficiente usando tiles em uma sobreposição de grade. Ele é composto por vários elementos, incluindo:

Você pode criar níveis 2D usando uma combinação de Sprites e GameObjects, e controlar propriedades como Camadas de Ordenação, Colisores de Tilemap e Tiles Animados, entre outros. Você também pode pintar Quadrado, Hexagonal e Sprites Isométricos.

Pinte seus níveis com Tilemap, para que o componente Tilemap Collider 2D gere automaticamente um Collider ao redor dos Tiles (com base na configuração do Tipo de Collider do Tile), quando aplicado a um GameObject Tilemap.

Vamos analisar os ganhos de desempenho que você obtém com o Tilemap em comparação com cenas construídas com Sprites.

Tilemap com menos objetos
TILEMAP NA DEMONSTRAÇÃO 2D DA UNITY DRAGON CRASHERS

Menos GameObjects

Usar Tilemap reduz os tempos de carregamento, bem como o uso de memória e CPU.

Se você já desenvolveu jogos e aplicativos 2D antes, então sabe que pode acabar com um número elevado 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 Renderer para todo o mapa e todos os seus tiles. Isso resulta em menos sobrecarga porque ele lida apenas com suas próprias estruturas de dados, em comparação a ter múltiplas estruturas de dados na memória.

Ter menos GameObjects resulta em uma hierarquia mais limpa, o que significa que você não precisará rolar por uma lista complexa tentando encontrar o que precisa.

Unity - Cena menor com o Tilemap
UMA COMPARAÇÃO DE DOIS ARQUIVOS SERIALIZADOS, UM CRIADO USANDO SPRITES (ESQUERDA) E O OUTRO USANDO TILEMAPS (DIREITA)

Tamanho de cena menor

O Tilemap da Unity 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 na Unity é um processo em duas partes: Primeiro, os dados são lidos do disco. Este é o processo que muitas vezes leva mais tempo em seu jogo, especialmente em dispositivos Android. Então os dados são desserializados. Desserialização é o processo de transformar dados de um formato para outro. Essencialmente, ele restaura dados e objetos de um estado salvo. A Unity faz a serialização internamente para que sempre que carrega um arquivo de cena no Editor e em tempo de execução, ela pega esses arquivos salvos e os transforma em objetos 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. Agradecimentos a Pixel Reign por esta cena de seu jogo Robbie Swifthand.

À direita, está uma seção de um Tilemap serializado, composto por quatro tiles. As regras para todos os tiles, incluindo o tipo de tiles usados, estão definidas no topo do Tilemap. Cada um dos tiles seguintes declara propriedades como o tile usado e sua posição.

À esquerda, está um Sprite, com componentes Transform e Sprite Renderer.

É claro a partir desta comparação quanto trabalho a serialização de Sprites tem que fazer. Em particular, a cena usando Sprites tem 370.000 linhas em seu arquivo, enquanto a cena com Tilemaps tem 30.000 linhas. Tamanhos menores de projeto e repositório resultam em tempos de iteração mais rápidos e fluxos de trabalho mais suaves.

Se você quiser visualizar suas próprias cenas como um arquivo de texto, acesse suas Configurações do Editor, ative o modo de Serialização de Assets, clique em Force Text e abra o arquivo de cena .unity no Editor de Texto.

Unity - Menos colliders com o Tilemap
COLISOR DE TILEMAP 2D COMBINADO COM COLISOR COMPOSTO 2D

Menos Colisores

Você pode combinar o Colisor de Tilemap 2D com o Colisor Composto. Isso não apenas reduzirá o número de Colisores e Sprites, mas também traz mais eficiência para sua produção, pois não há necessidade de reconstruir formas de colisão complexas toda vez que você faz uma alteração. O Colisor Composto cuida disso.

Casos de uso para Tilemaps
UM CASO DE USO PARA GAMEOBJECTS INDIVIDUAIS COM SEU SPRITE RENDERER VS UM TILEMAP

Sobrecarga de renderização reduzida

Como mencionado anteriormente, cada Sprite tem um componente Sprite Renderer, e ter mais renderizadores requer mais trabalho da CPU, incluindo tempo para preparação de culling e limpeza para renderização. Ao usar Tilemaps, você terá menos componentes Renderer, economizando assim trabalho da CPU.

Custo de culling reduzido

Mais de uma câmera em sua cena significa mais renderizadores. Isso aumenta o custo de culling.

Na visualização da Câmera, há um custo por renderizador, por câmera para culling. Toda câmera precisa realizar verificações de culling em cada componente Renderer na cena, então, se você tiver uma configuração de múltiplas câmeras para o seu jogo, usar Tilemaps ajudará a reduzir esse custo.

menos chamadas em lote
O FRAME DEBUGGER

Menos chamadas em lote

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 a tabela na seção a seguir mostra, a cena baseada em Tilemap tem significativamente menos batches.

Você pode verificar o batching olhando para o painel de estatísticas na sua visualização de Jogo. Você também pode usar o Frame Debugger para determinar por que os itens não estão sendo agrupados.

Cenas que usam tabela de tilemaps e sprites

Uma taxa de quadros mais rápida

Para alcançar 60 fps, cada quadro pode levar no máximo 16 ms para renderizar. Quando a cena de amostra foi analisada em um antigo iPhone 7, a versão baseada em Sprite teve 244 ms por quadro, enquanto a versão Tilemap teve 13 ms por quadro.

Finalmente, o uso de RAM estava em 1,1 GB com a cena baseada em Sprite, o que é muito para telefones Android de baixo custo, por exemplo. A cena baseada em Tilemap usou apenas 21 MB de RAM, tornando-a adequada para rodar em uma gama mais ampla de dispositivos móveis.

A comparação acima mostra a clara diferença de desempenho entre as duas cenas.

Demonstração de Sprite Atlas
USANDO SPRITE ATLAS EM DRAGON CRASHERS

Empacote Sprites com Sprite Atlas

Sprite Atlas é a ferramenta do Editor que permite empacotar seus Sprites em texturas para otimizar o uso de memória e chamadas de desenho. Crie um ativo de Sprite Atlas 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).

Mais recursos para criadores de jogos 2D

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 as melhores práticas 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 procedurais com Tilemaps – Parte I e Parte II: Adicione diversidade ao seu jogo com geração procedural. Esses posts explicam alguns dos algoritmos que você pode usar com Tilemap e RuleTile.