Animação Atrasada na Unity? Has Exit Time e Transições

Unity Animator Has Exit Time explicado: por que a animação demora a responder, como ajustar Transition Duration e Interruption Source, com valores por tipo.
Animação Atrasada na Unity? Has Exit Time e Transições
Se a animação da Unity demora a responder (você aperta pular e o personagem só sai do chão meio segundo depois), a causa quase sempre é o Has Exit Time ligado na transição do Animator. Com ele ativo, a transição espera o clip de origem chegar ao Exit Time antes de começar, não importa quando a condição ficou verdadeira. Os outros dois suspeitos são uma Transition Duration longa e a Interruption Source em None, que impede o ataque de ser cancelado.
Este guia explica cada campo do Inspector de transição no Unity 6.3 e termina com uma tabela de valores para locomoção, pulo, ataque e dano.
Por que a animação fica atrasada na Unity
Quando você cria uma transição clicando com o botão direito num estado e escolhendo Make Transition, a Unity cria a seta com Has Exit Time ligado e um Exit Time perto do fim do clip. Para uma transição Idle para Run, isso significa: o jogador empurra o analógico, a condição Speed > 0.1 fica verdadeira, e o Animator espera o idle terminar o ciclo atual. Se o clip de idle tem 3 segundos, o atraso pode chegar a quase 3 segundos.
O padrão faz sentido para animações encadeadas (um golpe que termina e volta ao idle), mas é o oposto do que você quer em qualquer transição disparada por input. Por isso a primeira coisa a fazer num Animator novo é passar por todas as setas e perguntar: "essa troca acontece porque o jogador fez algo, ou porque o clip acabou?".
Para diagnosticar, rode o jogo com a janela Animator aberta e o personagem selecionado. Você vê a barra de progresso do estado atual e o momento exato em que a transição começa. Se a condição já está verdadeira (confira na aba Parameters) e a barra continua andando, é Exit Time.
Has Exit Time: o que faz e quando desligar
Selecione a seta da transição. No Inspector aparecem:
- Has Exit Time: quando ligado, a transição depende do tempo normalizado do estado de origem e só acontece no ponto definido em Exit Time.
- Settings (dobrável): os detalhes de tempo e interrupção.
- Conditions: zero, uma ou várias condições, e todas precisam ser verdadeiras.
A combinação dos dois define o comportamento:
| Has Exit Time | Conditions | Resultado |
|---|---|---|
| Ligado | Nenhuma | Troca quando o clip chega ao Exit Time. Ideal para "terminou, volta". |
| Ligado | Alguma | Troca quando as condições são verdadeiras e o Exit Time foi atingido. Gera atraso. |
| Desligado | Alguma | Troca no frame em que as condições ficam verdadeiras. Resposta imediata. |
| Desligado | Nenhuma | Não há o que dispare a transição. O editor mostra um aviso. |
Regra prática: transição que responde ao jogador fica com Has Exit Time desligado. Transição que existe para fechar uma animação (ataque para idle, aterrissagem para idle) fica ligada e sem condição.
Exit Time, Transition Duration e Transition Offset
Abra Settings:
- Exit Time: o tempo normalizado do estado de origem em que a transição pode começar. 0,5 é metade do clip, 1 é o fim. Valores abaixo de 1 são checados a cada loop. Valores acima de 1 são checados uma vez só, depois de tantas repetições: 2,0 espera o clip tocar duas vezes.
- Transition Duration: quanto dura a mistura entre o clip de origem e o de destino. No gráfico de timeline da transição, é a faixa entre os dois marcadores azuis.
- Transition Offset: em que ponto o clip de destino começa. 0,5 começa o destino na metade. Útil para entrar numa corrida no passo certo, ou para pular a antecipação de uma animação quando a transição vem de outro movimento que já fez esse papel.
O gráfico logo abaixo é o melhor lugar para entender a transição. Arraste os marcadores e veja o preview: a barra de cima é o clip de origem, a de baixo é o destino, e a área sobreposta é a mistura.
Exit Time controla quando. Transition Duration controla quanto tempo. Atraso perceptível ao apertar um botão vem do primeiro. Movimento "mole", que parece borrado entre duas poses, vem do segundo.
Fixed Duration em segundos ou porcentagem
A caixa Fixed Duration muda a unidade da Transition Duration:
- Ligada: a duração é em segundos. 0,1 é sempre um décimo de segundo.
- Desligada: a duração é uma fração do tempo normalizado do estado de origem. 0,25 de um clip de 4 segundos dá 1 segundo de mistura.
Deixe ligada quase sempre. Com ela desligada, a mesma transição fica rápida saindo de um clip curto e lenta saindo de um clip longo, e você não percebe até trocar uma animação e tudo ficar estranho. Pense em segundos: é a unidade em que você sente o controle.
Até aqui cada campo é simples. O difícil é ajustar dezenas de transições de um personagem inteiro, com combate, pulo e dano interagindo, e ainda manter o controle responsivo. É esse tipo de ajuste fino, dentro de um jogo completo e não numa cena de teste, que o curso de Unity trabalha com você, do primeiro estado ao personagem jogável.
Interruption Source e Ordered Interruption
Uma transição em andamento pode ser interrompida por outra? Quem decide é a Interruption Source:
- None: nenhuma outra transição interrompe. A mistura vai até o fim. É o padrão.
- Current State: transições que saem do estado de origem podem interromper.
- Next State: transições que saem do estado de destino podem interromper.
- Current State then Next State: testa primeiro as do estado de origem, depois as do destino.
- Next State then Current State: o contrário.
E Ordered Interruption define se a ordem das transições na lista importa. Ligada, a busca para na primeira transição válida ou ao chegar na própria transição atual. Desligada, só para numa transição válida, o que permite que qualquer uma da fila interrompa.
Na prática: um ataque que começa a misturar com a volta ao idle, com Interruption Source em None, não pode ser cancelado por um esquiva até a mistura acabar. Colocando Next State na transição Attack para Idle, uma transição Idle para Dodge pode interromper a mistura no meio. Para o dano, Current State na transição Run para Attack permite que a transição Run para Hurt corte o começo do ataque.
Configurações recomendadas por tipo de animação
Pontos de partida que funcionam na maioria dos jogos de ação. Ajuste no controle, com o jogo rodando.
| Transição | Has Exit Time | Exit Time | Fixed Duration | Duration | Interruption Source |
|---|---|---|---|---|---|
| Idle para Walk/Run | Off | (ignorado) | On | 0,1 a 0,15 s | None |
| Run para Idle | Off | (ignorado) | On | 0,1 a 0,2 s | None |
| Qualquer para Jump | Off | (ignorado) | On | 0 a 0,05 s | None |
| Fall para Land | Off | (ignorado) | On | 0,05 s | None |
| Land para Idle | On | 0,6 a 0,9 | On | 0,1 s | Next State |
| Idle/Run para Attack | Off | (ignorado) | On | 0 a 0,05 s | None |
| Attack para Idle | On | 0,8 a 0,95 | On | 0,1 a 0,15 s | Next State |
| Attack 1 para Attack 2 (combo) | Off | (ignorado) | On | 0,05 s | None |
| Qualquer para Hurt | Off | (ignorado) | On | 0 a 0,05 s | None |
Por que o pulo e o ataque têm duração quase zero: a mistura gasta justamente os frames de antecipação, que são os que vendem o golpe. Em pixel art e sprite sheet, use 0 em todas as transições, porque mistura entre sprites não cria frames intermediários, só atrasa a troca. O guia de game feel mostra por que resposta imediata pesa mais do que suavidade na sensação do controle.
Erros comuns: transição que nunca acontece e ataque que não cancela
A transição nunca acontece. Confira, nesta ordem: a condição está com o parâmetro certo e o valor certo (Bool true, Float com "Greater" e não "Less"); Has Exit Time ligado junto com uma condição que só fica verdadeira por um frame, que passa antes do Exit Time chegar; a transição sai do estado certo (uma seta de Run não ajuda se o personagem está em Walk). Se o parâmetro é um Trigger, lembre que ele só é consumido por uma transição válida. Os detalhes de cada tipo estão no guia de parâmetros do Animator.
O ataque não cancela. Has Exit Time ligado na transição de saída do ataque segura tudo até o Exit Time. Se o design pede cancelamento (esquivar no meio do golpe), crie uma transição Attack para Dodge com Has Exit Time desligado e a condição de esquiva. Para cancelar só depois da fase ativa do golpe, a lógica fica melhor no script, liberando o cancelamento num Animation Event, como no sistema de combate corpo a corpo.
Personagem trava no último frame. Clip sem Loop Time e transição de saída que depende de condição que nunca chega. Ou ligue Has Exit Time sem condição na saída, ou garanta que o script desliga o Bool.
Mistura estranha, corpo atravessando pose. Transition Duration alta entre poses muito diferentes (agachado para pulo, por exemplo). Reduza para 0,05 s ou crie um estado intermediário.
Transição que acontece duas vezes. Duas setas entre os mesmos estados com condições que se sobrepõem. A janela Animator mostra uma seta com três pontas quando há mais de uma transição. Selecione e veja a lista no Inspector.
Próximo passo
Abra o Animator do seu personagem e revise cada seta com a pergunta "input ou fim de clip?". Desligue o Has Exit Time das de input, ligue Fixed Duration em todas, e aplique a tabela acima como ponto de partida. Teste com o controle na mão: se o pulo não sai no mesmo frame do botão, ainda tem Exit Time ou Duration atrapalhando.
Perguntas frequentes
O que é Has Exit Time no Animator da Unity?
É a opção que faz a transição esperar o estado de origem chegar a um ponto do seu tempo normalizado, definido em Exit Time, antes de trocar. Com ela ligada, a transição ignora o momento em que a condição ficou verdadeira e espera esse ponto do clip.
Quando devo desligar o Has Exit Time?
Desligue em toda transição que responde a input ou a um evento do jogo, como sair do idle para correr, pular ou atacar. Deixe ligado quando a animação precisa terminar antes de seguir, como o fim de um ataque voltando para o idle.
Qual a diferença entre Exit Time e Transition Duration?
Exit Time diz quando a transição pode começar, em tempo normalizado do clip de origem. Transition Duration diz quanto tempo a mistura entre os dois clips dura depois que começou. Um atraso perceptível costuma vir do primeiro, e um movimento borrado ou mole costuma vir do segundo.
Transição sem condição funciona?
Funciona só com Has Exit Time ligado: a Unity considera apenas o Exit Time e troca quando o clip chega nesse ponto. Sem Has Exit Time e sem condição, a transição não tem como ser disparada, e o editor avisa.

