Animation Rigging na Unity: IK de Mãos, Cabeça e Pés

Unity Animation Rigging na prática: cabeça olhando para o alvo com Multi-Aim, mão na arma com Two Bone IK, pés no chão em rampas e pesos por script.
Animation Rigging na Unity: IK de Mãos, Cabeça e Pés
O Animation Rigging da Unity é um pacote que adiciona IK (cinemática inversa) e outras constraints por cima das animações em tempo de execução. Com ele, a cabeça do personagem olha para um alvo, a mão esquerda segura o cano da arma em qualquer animação e os pés se ajustam ao chão em rampas e escadas. Tudo é feito com componentes na hierarquia e pesos que você liga e desliga por script.
Aqui você vai instalar o pacote no Unity 6.3, montar o Rig Builder, configurar Multi-Aim para cabeça e tronco, Two Bone IK para a mão na arma, pés no chão com raycast e controlar os pesos por código.
O que é Animation Rigging e IK na Unity
Uma animação comum é FK (cinemática direta): cada osso tem sua rotação gravada, do ombro até o dedo. Se o personagem segura uma arma e você troca o modelo da arma, a mão continua no lugar antigo.
IK inverte o raciocínio: você define onde a ponta da cadeia deve ficar (a mão, o pé) e o solver calcula as rotações dos ossos anteriores. É assim que um personagem pisa num degrau sem ter uma animação para cada altura.
O pacote Animation Rigging roda depois do Animator: primeiro a animação define a pose, depois as constraints ajustam, misturadas pelo peso. Ele funciona com rigs Humanoid e Generic. O Unity 6.3 lista o pacote com.unity.animation.rigging na versão 1.4.1 como liberado para esse editor.
Instalando o pacote e montando o Rig Builder
- Window > Package Management > Package Manager, lista Unity Registry, procure Animation Rigging e clique em Install.
- Selecione na hierarquia o objeto que tem o Animator do personagem.
- No menu Animation Rigging, clique em Rig Setup. A Unity adiciona um Rig Builder no objeto selecionado, cria um filho chamado
Rig 1com o componente Rig e já coloca esse Rig na lista Rig Layers do Rig Builder. - Ainda com o objeto selecionado, use Animation Rigging > Bone Renderer Setup. Ele cria um Bone Renderer que desenha os ossos na Scene view. Não muda nada no jogo, mas ajuda muito a ver o que está acontecendo.
A estrutura fica assim:
Player (Animator, Rig Builder)
├── Armature / mixamorig:Hips ...
└── Rig 1 (Rig)
├── HeadAim (Multi-Aim Constraint)
└── LeftHandIK (Two Bone IK Constraint)
├── LeftHandIK_target
└── LeftHandIK_hint
Renomeie Rig 1 para algo que descreva o uso, como AimRig. Você pode ter vários Rigs empilhados no Rig Builder, cada um numa camada que pode ser ligada, desligada e pesada separadamente. Uma divisão prática: um Rig para mira (cabeça e tronco), outro para mãos na arma, outro para pés.
Multi-Aim Constraint: cabeça e tronco olhando para o alvo
- Crie um filho do Rig chamado
HeadAime adicione Multi-Aim Constraint. - Constrained Object: o osso da cabeça (
mixamorig:Headnum personagem do Mixamo). - Aim Axis: o eixo do osso que aponta para a frente. Em rigs do Mixamo costuma ser Z, mas confira: selecione o osso, ponha o gizmo em modo Local e veja qual eixo aponta para o rosto.
- Source Objects: crie um objeto vazio na cena chamado
LookTargete arraste para a lista, com peso 1. - Constrained Axes: deixe X, Y e Z.
- Min Limit e Max Limit: -60 e 60. Sem limite, a cabeça gira como numa cena de terror quando o alvo passa por trás.
Mova o LookTarget no Play mode e a cabeça acompanha. Para o tronco participar, crie mais uma Multi-Aim no osso Spine2 (ou equivalente) com o mesmo alvo e peso 0,3. A cabeça faz a maior parte do giro e o tronco acompanha um pouco, o que fica muito mais natural do que só a cabeça virando.
Se a cabeça aponta para o lado errado, o Aim Axis está errado. Se ela inclina de lado ao olhar para cima, ajuste Up Axis e World Up Type. A opção Maintain Rotation Offset preserva a rotação inicial do osso, útil quando a pose de descanso já tem a cabeça levemente inclinada.
Two Bone IK Constraint: mão na arma
O caso clássico: a animação de segurar o rifle foi feita para uma arma, e a sua é mais longa. A mão esquerda precisa ficar no guarda-mão, em qualquer animação.
- Crie um filho do Rig chamado
LeftHandIKe adicione Two Bone IK Constraint. - Preencha Tip com o osso da mão esquerda e use a opção Auto Setup from Tip Transform no menu do componente. Ela preenche Root (braço) e Mid (antebraço) e cria os objetos de Target e Hint.
- Arraste o objeto
LeftHandIK_targetpara dentro da arma, na posição do guarda-mão. Como filho da arma, ele acompanha qualquer movimento do rifle. - Posicione o
LeftHandIK_hintatrás e um pouco abaixo do cotovelo. O hint diz para onde o cotovelo deve apontar. - Ajuste Target Position Weight e Target Rotation Weight em 1, e Hint Weight em 1.
Para a rotação da mão ficar certa, alinhe o target com o osso antes de mover: selecione o target, depois o osso da mão, e use Animation Rigging > Align Transform. Assim o target começa com a mesma orientação da mão e você só desloca até o cabo.
Mãos na arma, cabeça mirando e pés no chão parecem detalhes, mas são o que separa um personagem de protótipo de um personagem que convence. E fazer isso funcionar junto com movimento, câmera e animações de verdade é a parte que costuma travar quem aprende sozinho. O curso de Unity constrói esse personagem dentro de um jogo completo, uma camada por vez.
Pés no chão em rampas com raycast e IK
Crie um Rig separado chamado FootRig com duas Two Bone IK Constraint, uma por perna (Tip no osso do pé, com Auto Setup). Depois, um script move os targets para onde o raycast encontra o chão.
Tem uma armadilha aqui: no LateUpdate, o osso do pé já está na posição corrigida pelo IK do frame. Se o script lê o osso do pé e põe o target ali, o pé fica preso no lugar em que estava (o IK copia o target, o target copia o pé). A saída é guardar a pose do pé que veio da animação, antes do IK. Crie outro Rig, FootRefRig, e coloque-o acima do FootRig na lista Rig Layers (as camadas são avaliadas em ordem). Dentro dele, dois objetos vazios, LeftFootRef e RightFootRef, cada um com uma Multi-Parent Constraint cujo Source Object é o osso do pé, com Maintain Offset desligado. Eles copiam o pé animado antes de o FootRig mexer na perna. Arquivo FootGrounder.cs, no objeto do Animator:
using UnityEngine;
public class FootGrounder : MonoBehaviour
{
[SerializeField] private Transform leftFootRef;
[SerializeField] private Transform rightFootRef;
[SerializeField] private Transform leftFootTarget;
[SerializeField] private Transform rightFootTarget;
[SerializeField] private LayerMask groundLayers;
[SerializeField] private float rayStartHeight = 0.5f;
[SerializeField] private float rayLength = 1.2f;
[SerializeField] private float footOffset = 0.08f;
private void LateUpdate()
{
PlaceFoot(leftFootRef, leftFootTarget);
PlaceFoot(rightFootRef, rightFootTarget);
}
private void PlaceFoot(Transform footRef, Transform footTarget)
{
Vector3 origin = footRef.position + Vector3.up * rayStartHeight;
if (Physics.Raycast(origin, Vector3.down, out RaycastHit hit, rayLength, groundLayers))
{
Quaternion slope = Quaternion.FromToRotation(Vector3.up, hit.normal);
footTarget.SetPositionAndRotation(hit.point + hit.normal * footOffset, slope * footRef.rotation);
}
else
{
footTarget.SetPositionAndRotation(footRef.position, footRef.rotation);
}
}
}
O raio começa acima do pé animado, para encontrar o chão mesmo quando o pé estaria enterrado na rampa. O footOffset compensa a espessura da sola. A rotação parte da rotação animada do pé e só inclina pela normal da rampa, então o pé mantém a orientação do clip e acompanha o declive.
Para o corpo descer junto em degraus (senão a perna de baixo estica demais), abaixe o quadril pela diferença entre o pé mais baixo e a posição do personagem. Esse ajuste fino é onde a matemática de vetores para jogos aparece de verdade: normal, projeção e diferença de altura.
Controlando o peso das constraints por script
Cada Rig e cada constraint têm weight de 0 a 1. Peso 0 é a animação pura, 1 é a constraint inteira. Arquivo AimRigController.cs:
using UnityEngine;
using UnityEngine.Animations.Rigging;
public class AimRigController : MonoBehaviour
{
[SerializeField] private Rig aimRig;
[SerializeField] private TwoBoneIKConstraint leftHandIK;
[SerializeField] private Transform lookTarget;
[SerializeField] private Transform aimPoint;
[SerializeField] private float blendSpeed = 6f;
private bool isAiming;
public void SetAiming(bool aiming)
{
isAiming = aiming;
}
private void Update()
{
float target = isAiming ? 1f : 0f;
aimRig.weight = Mathf.MoveTowards(aimRig.weight, target, blendSpeed * Time.deltaTime);
leftHandIK.weight = Mathf.MoveTowards(leftHandIK.weight, target, blendSpeed * Time.deltaTime);
if (aimPoint != null)
{
lookTarget.position = aimPoint.position;
}
}
}
O using UnityEngine.Animations.Rigging dá acesso a Rig e às constraints. Usar MoveTowards em vez de trocar de 0 para 1 direto evita o tranco da cabeça virando num frame. Desligue a mão na arma durante recarregar e trocar de arma, e o rig de pés durante pulo e queda.
Prefira mover o objeto alvo a trocar a lista Source Objects por código: alterar os sources em tempo de execução exige reconstruir o rig, enquanto mover um transform é de graça.
Erros comuns: braço torcido, rig sem efeito e conflito com Animator IK
Braço torcido ou cotovelo invertido. Falta o Hint ou ele está no lugar errado. Posicione atrás do cotovelo, na direção em que ele deve dobrar. Se o pulso gira estranho, o target não está alinhado ao osso: use Align Transform e ajuste Maintain Target Offset.
Rig sem efeito nenhum. Rig Builder fora do objeto do Animator, Rig fora da lista Rig Layers, constraint fora de um filho do Rig, ou peso em 0. Confira os quatro.
Rig funciona no editor e some no Play. Algum script zera o peso no Start, ou o Animator foi desativado e reativado, o que reconstrói o grafo. Confira os scripts e o Rig Builder ativo.
Conflito com Animator IK. Se a camada do Animator tem IK Pass ligado e você implementa OnAnimatorIK, ou se os estados têm Foot IK ligado, os dois sistemas brigam. Escolha um. Para o que este post mostra, desligue IK Pass e Foot IK e deixe o Animation Rigging cuidar.
Mão tremendo. O target é filho de algo que se move depois da avaliação do rig. Coloque o target como filho da arma, e a arma como filho do osso da mão direita.
Próximo passo
Comece pela Multi-Aim na cabeça, que é a mais simples e já muda muito o personagem. Depois a mão na arma, e por último os pés. Se o seu personagem ainda está em T-pose ou com Avatar estranho, resolva primeiro com o guia de Mixamo na Unity. E se o rig do modelo deforma mal nos ombros, o problema vem de antes da Unity: veja o post de rigging de personagem 3D.
Perguntas frequentes
O que é IK na Unity?
IK, ou cinemática inversa, calcula a rotação de uma cadeia de ossos a partir da posição que a ponta precisa alcançar. Em vez de animar ombro, cotovelo e pulso, você diz onde a mão deve estar e o sistema resolve o braço. Na Unity, o pacote Animation Rigging oferece isso por componentes.
Qual a diferença entre Animation Rigging e o IK do Animator?
O IK do Animator funciona só em rigs Humanoid e é controlado por código no OnAnimatorIK. O Animation Rigging funciona em Humanoid e Generic, é montado com componentes visíveis na hierarquia e tem várias constraints prontas, como Multi-Aim e Two Bone IK.
Animation Rigging funciona no Unity 6.3?
Sim. O manual do Unity 6.3 lista o pacote com.unity.animation.rigging na versão 1.4.1 como liberado para essa versão do editor. Instale pelo Package Manager, na lista Unity Registry.
Por que minha constraint não faz efeito?
Verifique se o Rig Builder está no mesmo objeto do Animator, se o Rig está na lista Rig Layers e ativo, e se os pesos do Rig e da constraint estão acima de zero. Constraints fora de um objeto com componente Rig são ignoradas.


