Unity Mecanim Como reproduzir animação ao pressionar a tecla
Mecanim é uma ferramenta controlada por estado para Unity que oferece aos desenvolvedores controle de animação avançado e um editor rico em recursos.
Os recursos proeminentes do Mecanim são a mistura de animação e o redirecionamento de animação.
A combinação de animações é um processo automático de fazer transições suaves entre as animações.
Redirecionamento de animação é um processo de reaproveitar animações existentes para funcionar entre vários rigs de personagens, eliminando a necessidade de criar novas animações para cada novo personagem.
Neste tutorial, mostrarei como Animar um Cubo e reproduzir a Animação ao Pressionar a Tecla com o Mecanim.
Passos
Para animar um Cubo em Unity, siga os passos abaixo:
- Criar novo Cubo (GameObject -> Objeto 3D -> Cubo)
- Selecione o Cubo e abra a janela Animação (Janela -> Animação -> Animação)
- Na janela Animação, clique em "Create", o que criará uma nova animação, um novo Animator Controller e anexará um componente Animator ao Cubo.
- Nomeie a nova animação "SpinAnimation"
- Na janela de animação, clique em AddProperty -> Transform -> Rotation
- Esta animação terá 2 quadros, início e fim.
- Para o primeiro quadro, definimos a rotação para (0, 0, 0)
- Para o último quadro, definimos a rotação para (0, 360, 0)
A animação está pronta.
Dica: Para criar mais animações, basta clicar no nome da animação na janela Animação e clicar em "Criar novo clipe...".
Para configurar o Mecanim Animator Controller, siga os passos abaixo:
- Clique duas vezes no ativo Animator Controller que foi criado com a animação
- Nova janela intitulada "Animator" aparecerá, que deve se parecer com isto:
- Você notará que há uma seta apontando de "Entry" para "SpinAnimation", o que significa que a animação será reproduzida assim que a cena começar, mas isso é não é o que queremos, queremos apenas reproduzir a animação ao pressionar a tecla.
Como o Mecanim requer uma animação de entrada, o que podemos fazer é criar um novo estado Vazio e torná-lo uma Entrada:
- Clique com o botão direito na janela Animator -> Create State -> Vazio:
- Selecione o estado da entrada -> clique com o botão direito nele -> Defina o estado padrão da StateMachine e aponte para "New State":
A última coisa a fazer é fazer uma transição para SpinAnimation, mas só queremos fazer a transição quando a condição específica for atendida, é quando a guia Parâmetros entra em vigor :
- Clique na guia Parâmetros na janela do Animador e clique no símbolo (+):
Você notará que existem vários tipos disponíveis, mas, por enquanto, selecionaremos Trigger, é semelhante a bool mas ao contrário de bool, ele é definido automaticamente como falso assim que a animação é concluída, útil para animações únicas:
- Nomeie o parâmetro "spinTrigger"
- Por último, selecione "Any State" -> Clique com o botão direito sobre ele -> Faça a transição e aponte para SpinAnimation:
- Clique na seta de transição e na Visualização do Inspetor em Condições, clique em (+) e verifique se o parâmetro spinTrigger está selecionado
- Por padrão, as animações criadas com Unity têm o loop ativado, mas como queremos reproduzir a Animação apenas uma vez, o que precisamos fazer é selecionar o Clipe de Animação na visualização do Projeto e desmarcar a caixa de seleção Loop Time:
Para poder controlar os parâmetros do Mecanim a partir de um script, precisaremos usar funções especiais, verifique o código abaixo:
- Crie um novo script, chame-o de "AnimationTest", remova tudo dele e cole o código abaixo dentro dele:
AnimationTest.cs
using UnityEngine;
public class AnimationTest : MonoBehaviour
{
Animator animator;
// Start is called before the first frame update
void Start()
{
//Get Animator component
animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
//Play spin animation on key press
if (Input.GetKeyDown(KeyCode.Q))
{
animator.SetTrigger("spinTrigger");
}
}
}
- Anexar script AnimationTest.cs ao cubo com o componente Animator:
Agora vamos testar:
Tudo funciona como esperado, pressionando Q reproduz a animação.