Voltar para o Blog
Quest Log

Sprite Editor na Unity: Fatiar, Pivot e Custom Physics Shape

Sprite sheet de personagem em pixel art dividida por linhas de grade, com um ponto de pivot marcado nos pés de cada frame

Unity Sprite Editor sem frame desalinhado: Grid By Cell Size ou Automatic, pivot Bottom igual em todos os frames e Custom Physics Shape para o collider.

Ferramenta:Unity

Sprite Editor na Unity: Fatiar, Pivot e Custom Physics Shape

O Unity Sprite Editor é a janela onde você transforma uma imagem em sprites: fatia a sprite sheet em frames, define o pivot de cada um e desenha a forma de colisão. Para um personagem animado que não treme, a regra é simples: fatie com Grid By Cell Size (todos os frames do mesmo tamanho) e use o mesmo pivot em todos, normalmente Bottom, nos pés.

Aqui você configura o import, fatia uma sprite sheet no Unity 6.3 LTS, entende quando usar Automatic, Grid By Cell Size ou Grid By Cell Count, acerta o pivot, cria uma forma de colisão com Custom Physics Shape e organiza os nomes dos frames para a animação.

Sprite Editor na Unity: onde fica e o que precisa

  1. Selecione a textura no Project.
  2. No Inspector, Texture Type: Sprite (2D and UI).
  3. Clique em Open Sprite Editor.

A janela vem do pacote 2D Sprite, que os templates 2D já trazem. Se o botão não aparece, instale 2D Sprite pelo Package Manager.

No canto superior esquerdo da janela há um seletor de abas. No Unity 6.3 elas são:

  • Sprite Editor: fatiar, pivot, borda de 9-slice.
  • Custom Outline: a malha que desenha o sprite.
  • Custom Physics Shape: a forma de colisão.
  • Secondary Textures: normal map e máscaras para luz 2D.
  • Skinning Editor: ossos para animação esquelética, quando o pacote 2D Animation está instalado.

Sprite Mode Multiple e configurações de import

Antes de fatiar, acerte o import da sprite sheet no Inspector:

  • Sprite Mode: Multiple. Sem isso, o botão Slice nem aparece. Single é para imagem com um sprite só.
  • Pixels Per Unit: a altura que você quer que o personagem tenha em unidades. Personagem de 32 px de altura com PPU 32 tem 1 unidade de altura. Mantenha o mesmo PPU para todos os sprites do jogo, ou as escalas brigam.
  • Mesh Type: Full Rect se você vai usar shader de contorno ou efeito que desenha fora do desenho. Tight (padrão) economiza pixels desenhados, mas recorta justo.
  • Filter Mode: Point (no filter) em pixel art.
  • Compression: None em pixel art.

Clique em Apply antes de abrir o Sprite Editor. Se a sheet ainda vai ser montada, o post sobre o que é sprite sheet e como montar mostra como organizar os frames para o fatiamento sair limpo.

Fatiar: Automatic, Grid by Cell Size e Grid by Cell Count

Na aba Sprite Editor, clique em Slice. O campo Type tem quatro opções:

  • Automatic: recorta cada ilha de pixels opacos separada por transparência. Bom para folhas de itens e props de tamanhos diferentes. Ruim para animação: cada frame sai do tamanho do desenho, e um braço esticado gera um frame mais largo.
  • Grid By Cell Size: recorta em células de tamanho fixo, em pixels (Pixel Size). O certo para animação.
  • Grid By Cell Count: recorta em um número de colunas e linhas. Útil quando você sabe que a sheet tem 8 x 4 frames e não sabe o tamanho exato.
  • Isometric Grid: recorta em losangos, para tiles isométricos.

Configuração para uma sheet de personagem 32 x 32:

  1. Type: Grid By Cell Size.
  2. Pixel Size: X 32, Y 32.
  3. Offset e Padding: 0, a menos que a sheet tenha margem ou espaço entre frames (o Aseprite pode exportar com espaçamento; use os mesmos números aqui).
  4. Keep Empty Rects: desligado, para não criar frames vazios no fim da sheet. Ligue se você usa a posição na grade para saber qual frame é qual.
  5. Pivot: Bottom (próxima seção).
  6. Method: Delete Existing na primeira vez. Em refatiamentos, Smart ou Safe preservam sprites existentes e suas referências.
  7. Clique em Slice e depois em Apply no topo da janela.

Quando você reexporta a sheet do editor de imagem com o mesmo tamanho de célula, a Unity reimporta o arquivo e mantém os retângulos já fatiados. Só refatie se o tamanho ou a quantidade de frames mudou, e nesse caso use Method em Smart ou Safe para manter os sprites existentes.

Pivot: por que todo frame precisa do mesmo

O pivot é o ponto do sprite que fica na posição do Transform. É o ponto que gira, escala e espelha.

Se o pivot muda de frame para frame, o desenho anda dentro do GameObject a cada troca de frame, e o personagem treme sem você ter mexido nele. Com Grid By Cell Size e o mesmo pivot em todos, cada frame tem o mesmo retângulo e o mesmo ponto de apoio, então só o desenho muda.

Qual pivot usar:

  • Bottom para personagem de plataforma e top-down. O Transform fica nos pés: o personagem pisa no chão na posição exata, e o pivot no pé é o que faz a ordenação por Y funcionar em top-down.
  • Center para projéteis, itens que giram e inimigos voadores.
  • Custom quando o personagem não está centralizado na célula (por exemplo, uma espada longa só para um lado). Use Pivot Unit Mode: Pixels e digite o pixel exato dos pés, como 16, 2.

O espelhamento depende do pivot também. Com flipX, o sprite espelha em volta do pivot. Pivot centralizado no corpo, o personagem vira no lugar; pivot fora do corpo, ele pula para o lado a cada virada.

Arquivo SpriteFacing.cs:

using UnityEngine;
using UnityEngine.InputSystem;

public class SpriteFacing : MonoBehaviour
{
    [SerializeField] private SpriteRenderer spriteRenderer;
    [SerializeField] private float deadZone = 0.1f;

    private InputAction moveAction;

    private void Awake()
    {
        if (spriteRenderer == null)
        {
            spriteRenderer = GetComponent<SpriteRenderer>();
        }
        moveAction = InputSystem.actions.FindAction("Player/Move");
    }

    private void Update()
    {
        if (moveAction == null)
        {
            return;
        }

        float horizontal = moveAction.ReadValue<Vector2>().x;

        if (horizontal > deadZone)
        {
            spriteRenderer.flipX = false;
        }
        else if (horizontal < -deadZone)
        {
            spriteRenderer.flipX = true;
        }
    }
}

O script lê a ação Move do mapa Player, que vem no asset de Input Actions padrão dos projetos novos do Unity 6, por InputSystem.actions. Se o personagem pula para o lado ao virar, o problema está no pivot, não no código.

Fatiar e acertar o pivot é rápido. Fazer o personagem animado andar, pular, colidir e trocar de animação no momento certo, sem tremer e sem atravessar o chão, é o ponto em que muita gente desiste sozinha, porque arte, física e código precisam conversar. O curso de Unity monta esse personagem completo dentro de um jogo, passo a passo.

Curso de Unity
Quer fazer seu primeiro jogo na Unity?

No curso de Unity 6 da CursoGame.Dev você vai do zero ao primeiro jogo, com um desafio prático em cada level e suporte individual no WhatsApp quando travar.

Conhecer o curso de Unity
Suporte no WhatsAppAcesso vitalícioGarantia de 7 dias

Custom Physics Shape e Polygon Collider 2D

Para itens e objetos de cenário com formato irregular (pedra, tronco, cristal), o collider pode seguir o desenho:

  1. No Sprite Editor, troque a aba para Custom Physics Shape.
  2. Selecione o sprite e clique em Generate. A Unity cria um contorno seguindo a parte opaca.
  3. Ajuste Outline Detail (mais detalhe, mais vértices) e Alpha Tolerance (o quanto de transparência conta como vazio) e gere de novo.
  4. Edite os pontos à mão se precisar. Você também pode desenhar formas arrastando um retângulo sobre o sprite.
  5. Apply.
  6. No objeto da cena, Add Component > Polygon Collider 2D. Ele usa a forma que você desenhou.

Dois detalhes da documentação que pegam todo mundo:

  • Objetos que já tinham Polygon Collider 2D não atualizam sozinhos. Clique com o botão direito no título do componente e escolha Reset.
  • Editar o collider de uma instância na cena (botão Edit Collider) não muda a forma salva no Sprite Editor.

Para Tilemap, a mesma forma vale quando o Tile está com Collider Type: Sprite. Rampa e meio-bloco ficam com a colisão certa.

Personagem animado é outro caso. A forma do Polygon Collider 2D é lida do sprite quando o componente é configurado e não acompanha a troca de frames. Use Capsule Collider 2D no personagem: estável, não engancha em quina e não depende do desenho.

Renomear e reorganizar sprites fatiados

O fatiamento nomeia os frames como NomeDaTextura_0, NomeDaTextura_1 e assim por diante, na ordem da grade (esquerda para direita, de cima para baixo). Para animação, essa ordem já serve se a sheet está organizada por linha (linha 1 parado, linha 2 correndo).

Para renomear, selecione o frame e edite Name no painel do sprite. Nomes como Hero_Run_0 facilitam muito na hora de montar os clipes, porque você filtra por Run no Project.

Atenção: renomear ou refatiar com Delete Existing pode quebrar referências de animações já criadas. Use Smart ou Safe quando a sheet já está em uso, e renomeie antes de criar os clipes.

Se você exporta do Aseprite, o post sobre Aseprite para jogos mostra como exportar a sheet com tamanho de frame fixo e espaçamento definido, para os números do Slice baterem de primeira.

Erros comuns: personagem tremendo, borda cortada

Personagem tremendo na animação. Fatiado com Automatic ou com pivots diferentes. Refatie com Grid By Cell Size e Bottom.

Pedaço do frame vizinho aparecendo na borda. Filter Mode Bilinear ou falta de espaço entre frames. Troque para Point e, se puder, exporte a sheet com 1 ou 2 px de espaçamento (ajustando o Padding no Slice).

Borda do desenho cortada. Frame maior que a célula configurada, ou Offset errado. Confira o tamanho real do frame no editor de imagem.

Personagem pequeno demais ou gigante. PPU diferente do resto do jogo.

Botão Slice não aparece. Sprite Mode está em Single.

Collider não segue o desenho novo. Polygon Collider 2D antigo. Use Reset no componente.

Próximo passo: animar a sheet

Com a sheet fatiada e o pivot consistente, o próximo passo é transformar os frames em clipes de animação e trocar entre parado, correndo e pulando pelo Animator. O post sobre animação 2D com sprite sheet na Unity segue exatamente daqui.

Perguntas frequentes

Onde fica o Sprite Editor na Unity 6?

Selecione a textura no Project, confira que Texture Type está como Sprite (2D and UI) e clique em Open Sprite Editor no Inspector. A janela vem do pacote 2D Sprite, que já está instalado nos templates 2D; se o botão não aparecer, instale esse pacote pelo Package Manager.

Como fatiar uma sprite sheet na Unity?

Coloque Sprite Mode em Multiple, abra o Sprite Editor, clique em Slice e escolha Grid By Cell Size com o tamanho do frame em pixels (por exemplo 32 x 32). Defina o Pivot, clique em Slice e depois em Apply.

Por que meu personagem treme durante a animação?

Os frames têm pivots diferentes. Isso acontece com fatiamento Automatic, que recorta cada frame no tamanho do desenho. Fatie com Grid By Cell Size, para todos os frames terem o mesmo retângulo, e use o mesmo pivot em todos, como Bottom.

Custom Physics Shape funciona em personagem animado?

A forma é lida quando você adiciona o Polygon Collider 2D, a partir do sprite daquele momento. Ela não acompanha a troca de frames da animação. Para personagem animado, use Capsule ou Box Collider 2D; reserve a forma customizada para objetos de cenário e itens.