Uma rodada rápida de ótimas dicas para jogos 2D

Você está planejando fazer um jogo 2D com Unity? Então dê uma olhada nessas dicas úteis do nosso gerente de produto técnico 2D, Rus Scammell, e do gerente de marketing de produto 2D, Eduardo Oriz, que ajudarão você a começar rapidamente e trabalhar com eficiência durante todo o seu projeto.

Use o modelo 2D para começar rapidamente um novo projeto. O modelo está disponível no Unity Hub. Configurações exclusivas incluem:
- Uma cena padrão que usa uma visualização 2D e vem com uma câmera configurada para projeção ortográfica e limpa para uma cor sólida
- O Editor está definido como Modo 2D por padrão para que novas texturas sejam importadas como Sprites
- Iluminação global em tempo real desabilitada
- Instalação de pacotes 2D, incluindo 2D Animation, 2D Pixel Perfect, 2D PSD Importere 2D SpriteShape, bem como as dependências necessárias

A partir da versão 2020.2, os itens de menu 2D são exibidos como menus de nível superior para criação de GameObjects e Assets. Isso inclui um conjunto de Sprites 2D primitivos para prototipagem rápida. Menus também são adicionados para recursos mais recentes, como SpriteShape e Pixel Perfect Camera.

Pixels por unidade (PPU) é um conceito importante no desenvolvimento 2D. O PPU de um Sprite determina quantos pixels de largura ou altura em uma imagem Sprite correspondem a uma unidade de distância no espaço mundial.
Considere o PPU dos seus Sprites o mais cedo possível. Além de controlar a densidade de pixels, o PPU também afeta como os Sprites são usados pelos modos de desenho do Sprite Renderer, bem como outros sistemas como o Tilemap. Escolha uma densidade de pixels que seja adequada ao design do seu jogo e à plataforma de destino, e evite texturas desnecessariamente grandes.

O 2D PSD Importer importa arquivos PSB em camadas do Adobe Photoshop para o Unity. Ele permite que você use recursos como o Mosaic para gerar automaticamente uma Sprite Sheet a partir de camadas importadas e do equipamento do personagem. O Unity então remonta os Sprites de um personagem conforme eles foram organizados em seus arquivos de origem. O Importador foi projetado para funcionar de forma otimizada com o sistema de 2D Animation e fluxos de trabalho de personagens multicamadas.

Tente reduzir o número de passagens necessárias para desenhar a cor final na tela. Quando os pixels são semitransparentes, você deve considerar cada pixel sobreposto ao calcular a cor final. O excesso de pixels transparentes sobrepostos diminui o desempenho da GPU, especialmente em dispositivos menos potentes ou quando taxas de quadros mais altas são necessárias. Todos os Sprites na sua cena serão considerados transparentes, mas há maneiras de reduzir o overdraw.
O Unity irá sobrepor os pixels somente dentro da sua Máscara de Sprite. Com o retângulo completo, a área completa será sobreposta, mas se o Tipo de malha estiver definido como Estreita, a área sobreposta será reduzida, pois a malha gerada segue apenas o contorno do seu Sprite, ignorando as áreas vazias. Se você quiser ter mais controle sobre o contorno da malha, você pode alterá-lo no Editor de Sprites.

Você também pode reduzir o overdraw mesclando Sprites estáticos sobrepostos. Se os Sprites não precisarem se mover ou você não precisar deles para um efeito de paralaxe, considere mesclá-los quando o design do seu nível estiver finalizado.

Quando você tiver muitos Sprites com Colisores 2D estáticos, combine-os com o componente Colisor 2D Composto. Isso proporciona melhor desempenho e uma colisão mais suave com toda a superfície. O Composite Collider pode ser usado com Tilemaps; na imagem acima, os blocos roxos na tela são usados como Colliders. Você o habilita adicionando o componente e marcando a caixa Composto.
Um Composite 2D Collider também pode ser usado com GameObjects pais. Certifique-se de que os Colliders filhos estejam habilitados marcando a caixa Usado pelo Composite. Outra maneira de otimizar os Colliders é desenhar manualmente um polígono simples que funcione bem com seu GameObject.

Cada Renderer anexado a um GameObject, como um Sprite, tem alguma sobrecarga. Para exibir muitos Sprites estáticos de forma eficiente, use o Tilemap Renderer para uma maneira mais prática e de melhor desempenho de projetar seu jogo. Você pode renderizar centenas de Sprites com apenas um Renderizador. Quando você tem muitos Sprites para renderizar, mas não precisa classificá-los, use o Modo Tilemap Chunk para reduzir o uso de CPU e memória, o que é importante se você estiver mirando em dispositivos de baixo custo. Para usá-lo, coloque todos os tiles estáticos no mesmo Tilemap e ative o Modo Chunk.
Certifique-se de que todas as peças também estejam no mesmo Atlas de Sprites. Os blocos podem não ser exibidos corretamente na Visualização de Cena, mas serão classificados corretamente quando você entrar no Modo de Reprodução. Uma abordagem é projetar seu nível usando o Modo Individual e mudar para o Modo Chunk quando estiver pronto para publicar.
Se você precisar que os Sprites sejam classificados corretamente, por exemplo, para mover um personagem na frente e atrás de peças individuais, use o Modo Individual. Para Sprites que precisam ser movidos ou têm funcionalidade de jogo, use o Modo Regular.
Sprite Shape é a ferramenta 2D para projetar formas e níveis orgânicos. Por padrão, a API Sprite Shape permite que você altere os nós da spline em tempo de execução, o que pode afetar o desempenho. Se você não precisar dessa alteração no tempo de execução, poderá preparar ou armazenar em cache a geometria da spline para obter melhor desempenho. Selecione Sprite Shape Controller, ative Edit Spline e então Cache Geometry para preparar a malha. Se você usa o Unity 2019 LTS ou versões posteriores e está modificando o spline em tempo de execução, você pode obter uma grande melhoria de desempenho instalando o pacote Burst . Vá para o Gerenciador de Pacotes e instale o Burst versão 1.3 ou posterior.

Você pode usar Perfis de Forma de Sprite para projetar ambientes semelhantes aos que você faria com um software de desenho vetorial. Os Perfis podem ser usados tanto para elementos de jogabilidade quanto decorativos. Eles funcionam bem para diferentes estilos de arte e preenchem grandes áreas rapidamente, tudo isso usando menos recursos.
Os modos de desenho do Sprite Renderer ajudam você a economizar no tamanho dos seus ativos e tornam o processo de criação de níveis mais divertido. Com Tileable Sprites, você pode ter diferentes GameObjects usando o mesmo Sprite em tamanhos diferentes sem esticá-lo. Vá para o Editor de Sprites e mova as alças amarelas para enquadrar a parte do Sprite que poderá ser dividida em blocos. Aplique-o e vá até o GameObject e altere o Modo de Desenho do Renderizador de Sprite para o Modo Mosaico.
Você também pode criar seu nível com Sprites de 9 fatias, usando blocos que parecem nítidos e proporcionais enquanto você os dimensiona e organiza. No Editor de Sprites, selecione a área que deve ser dividida em blocos e certifique-se de que os cantos se encaixem na área que não será repetível. Em seguida, selecione o Modo de Desenho para fatiar.
Ao projetar jogos 2D, haverá situações em que alguns dos seus GameObjects estarão na mesma camada de classificação e ordem. Você pode criar muitas camadas e alguma lógica por trás dos seus Sprites em movimento para mostrá-los na ordem correta, mas isso não é eficiente. A maneira como informamos ao Unity a ordem correta para renderizar um Sprite nessas situações é com o Modo de Classificação por Transparência nas Configurações do Projeto. O Unity classifica os Sprites na ordem descrita pela direção de um Vector2 (definido pelos eixos X e Y nessas configurações). Veja como Eduardo Oriz, gerente de marketing de produto da Unity, e Rus Scammell, gerente de produto, configuraram essa otimização por volta da marca de 9:15 em sua palestra Unite Now .

Criar um clipe de animação quadro a quadro no Unity é simples. Selecione uma sequência de Sprites na janela Projeto e arraste-os para a visualização Cena ou para a janela Hierarquia. Um clipe de animação e um Animador serão criados para você automaticamente.
Se você quiser adicionar clipes de animação em um Animator existente, basta arrastar esses quadros de animação para o GameObject do Animator. O clipe será adicionado ao Animator. Mantenha pressionada a tecla Alt ou Option enquanto arrasta os quadros de animação para a hierarquia se quiser criar um GameObject diferente para cada Sprite.

O Unity suporta animação quadro a quadro e baseada em ossos. Aqui estão as principais diferenças entre as duas abordagens:
Quadro a quadro
- Cada quadro usa um Sprite exclusivo
- Clipes de animação adicionais requerem mais Sprites
- A taxa de quadros e a velocidade são geralmente constantes
- As animações de transição requerem Sprites adicionais
- Não funciona com 2D Inverse Kinematics (2D IK)
Baseado em osso
- Cada quadro de animação usa os mesmos Sprites
- Cada clipe de animação usa os mesmos Sprites
- Funciona bem para velocidade de animação variável
- O sistema de animação pode criar transições para clipes
- Funciona com 2D IK

Instale os pacotes Burst/ Collections para otimizar o desempenho da animação 2D para altas contagens de ossos e malhas Sprite com altas contagens de vértices. A deformação do Sprite animado em tempo de execução também terá um aumento de desempenho. Isso funciona permitindo que o pacote de 2D Animation use a compilação Burst e utilitários de matriz de baixo nível para acelerar o processamento da deformação da malha Sprite pelo Unity.
Certifique-se de estar usando o Unity 2020.2 e também o 2D Animation 5.0.x. Ao instalar o pacote Burst 1.3.3 ou mais recente, você também deve instalar o Collections , que é um pacote de visualização.


Ao preparar um Sprite para rigging, você tem controle total sobre a malha. Para começar rapidamente, o Skinning Editor oferece uma opção de mosaico automático. No entanto, você pode personalizar isso usando as ferramentas de malha para adicionar e remover vértices e criar a malha necessária.

Adicione componentes 2D Colliders e Rigidbody 2D aos personagens baseados em ossos para impulsionar o movimento por meio do sistema de física 2D. Na imagem de exemplo acima da palestra de Eduardo e Rus, os Capsule Colliders foram adicionados a cada osso, bem como aos componentes 2D do Rigidbody. Eles foram então conectados com juntas de dobradiça. Você pode usar limites de ângulo em cada articulação para limitar a amplitude de movimento e também pode alternar se os componentes do Rigidbody conectados por meio de uma articulação colidem entre si.

Mantenha uma densidade de pixels consistente em todos os seus ativos. Se o seu projeto tiver 32 PPU, por exemplo, você pode esperar que uma unidade contenha 32 pixels, como o bloco no lado esquerdo da imagem acima.
A câmera 2D padrão expressa o tamanho em unidades verticais a partir do centro da câmera. Na imagem de exemplo aqui, podemos encaixar 10 peças verticalmente:

Se seus ativos parecerem muito pequenos quando você os adiciona à visualização de Cena, em comparação à imagem de referência original, é bem provável que seja devido a uma incompatibilidade de resoluções.
O PPU padrão do Unity para sprites é definido como 100. Quando alteramos a configuração do Sprite Asset para 32 PPU do nosso projeto, o sprite terá o tamanho correto.

Por padrão, a Filtragem Bilinear é habilitada para ativos para suavizar bordas rígidas, mas se você quiser uma aparência pixelada de estilo retrô, altere o Modo de Filtro para Ponto para obter visuais nítidos que ocupem o espaço da tela definido no início.
Quando você tem muitos ativos para importar para seu projeto, alterar a configuração de cada Sprite individual para corresponder às configurações do seu projeto levará muito tempo. Em vez disso, crie um modelo de importação ou uma predefinição para que cada ativo importado tenha a configuração predefinida que você deseja. Para fazer isso:
1. Selecione um ativo com a configuração que você deseja
2. Clique no ícone Configurações ao lado do Sprite Asset para criar um modelo a partir dele
3. Salve-o com um nome que ajude você a lembrar o que ele faz
4. Torne-o o padrão para que todos os novos ativos importados tenham essa configuração (você verá o ativo predefinido na visualização do projeto)

Se você estiver trabalhando com pixel art, certifique-se de que a tela sempre mostre o mesmo número de pixels e que todos esses pixels permaneçam do mesmo tamanho. Primeiro, vá até sua Câmera e adicione a Câmera Pixel Perfect. Defina o PPU do ativo para aquele que você usa na sua pixel art.
Depois de adicionar o componente Pixel Perfect Camera, ele assumirá o controle da câmera no Modo de reprodução, mas você também poderá ver as alterações no Editor se habilitar Executar no Modo de edição.

No seu projeto, personagens e objetos podem mudar de posição, rotação ou tamanho. Por padrão, eles terão uma interpolação suave, mas se você quiser permanecer fiel às limitações da pixel art indicadas pelo PPU do seu projeto, habilite o Upscale Texture. Os GameObjects se moverão em incrementos de um pixel. As alterações de rotação e escala também respeitarão as restrições visuais. Saiba mais sobre dicas para criar jogos de 8 e 16 bits com aparência retrô.
Grupos de classificação: Os grupos de classificação permitem que você agrupe renderizadores 2D. Você pode usar Camadas de Classificação e Ordem em Camadas para garantir que a ordem de renderização esteja correta para cada personagem, mas isso não funcionará se houver sobreposição e as partes individuais ficarem entrelaçadas.

Você pode colocar um Grupo de Classificação no GameObject raiz para cada personagem para agrupar os Renderers e classificá-los como um só. Com os Grupos de Classificação, os personagens não se entrelaçam nem são classificados como um grupo. Os grupos de classificação funcionam com todos os renderizadores 2D, bem como com sistemas de partículas.
Atlas de Sprites: Este recurso reúne vários Sprites em uma única textura combinada. O Unity pode então usar essa textura única para aumentar o desempenho emitindo uma única chamada de desenho em vez de várias chamadas de desenho para cada Sprite localizado em uma única pasta.
Ao adicionar uma pasta a um Sprite Atlas, você pode adicionar e remover Sprites livremente do seu Sprite Atlas ao longo da sua produção, simplesmente alterando o conteúdo das pastas compactadas.

Também é possível criar variantes de Sprite Atlases que tenham tamanhos diferentes ou configurações de compactação diferentes para atingir uma variedade de plataformas com os mesmos ativos de origem.
Você deve considerar uma estratégia de atlas que funcione para o seu jogo. O Sprite Atlas foi projetado para que você possa encontrar um equilíbrio entre produtividade, flexibilidade e desempenho.
Veja como estamos capacitando artistas 2D; aprenda como a Odd Bug usou luzes 2D para criar clima em seu jogo Tails of Iron; baixe o projeto de amostra 2D The Lost Crypte leia este guia detalhado sobre como escolher a melhor resolução para seus ativos 2D. Por fim, você pode assistir à apresentação Unite Now de Eduardo e Rus aqui.
