Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Continuando o processo que iniciamos em nosso encontro anterior, iremos dar prosseguimento ao processo de testes em relação à aplicabilidade de interessantes animações aos personagens do game Consultório do Doutor Tratanildo.
Caso esta seja a primeira vez que você acessa nossa série, considere-se convidado desde já a acompanhar, a partir do primeiro tópico da série, divertidas atividades envolvendo aspectos práticos do desenvolvimento de jogos.
Por meio da elaboração de diferentes projetos, iremos aprender juntos diferentes conceitos sobre como a ferramenta Unity pode nos auxiliar a tirar do papel os jogos que sempre sonhamos em tornar realidade.
Abordamos desde os tópicos mais básicos, como as etapas de instalação e configuração da ferramenta em nossos computadores, até as etapas concretas do desenvolvimento de um game, como a criação de cenas, o posicionamento de personagens e objetos, e a codificação de scripts controladores.
Um “tchau” pra você
A partir dos experimentos que realizamos em nosso encontro anterior, pudemos perceber que a animação de modelos humanoides pode ser facilitada por meio da adoção da técnica de rigging, ou seja, a aplicação de animações esqueléticas aos personagens de um game.
Talvez você já esteja desconfiado de que, dada a aplicabilidade ampla que a técnica permite a diferentes tipos de modelos humanoides, seja bem simples a transferência de um comportamento de animação entre dois personagens de nosso game.
Se esta era sua desconfiança, você está completamente certo: iremos iniciar nossos experimentos de hoje aplicando a mesma animação que testamos anteriormente (o aceno com os membros superiores, simulando um “tchauzinho”) em outro importante personagem do jogo.
Para isso, iremos abrir o Unity Hub e clicar duas vezes sobre o item referente ao projeto Consultório do Dr. Tratanildo. Na interface inicial do Unity, na aba Project, abra a pasta Assets, Scenes e, por fim, clique duas vezes no ícone da cena ConsultorioScene. Certifique-se de estar com a visualização da aba Scene em evidência na tela.
Na aba Hierarchy, iremos selecionar o GameObject Doutor_rindo, subordinado a Personagens. Na aba Inspector, vamos modificar o valor do parâmetro Controller do componente Animator do objeto para o Animator Controller de nome animControllerPacienteBase, conforme exemplificado a seguir:
O comportamento que adotamos para nossos pacientes agora será também apresentado pelo GameObject que representa o doutor na cena. Experimente a simulação do jogo, indo à aba Game e pressionando o ícone do botão Play:
Agora temos dois animados modelos em nossa cena nos acenando sem parar, nos mostrando como é fácil a transferência de comportamentos entre modelos de mesma natureza no Unity.
Interrompa a simulação da execução, pressionando novamente o ícone do botão Play e voltando à aba Scene.
Uma caminhada sem fim
Vamos introduzir mais uma animação muito útil ao nosso jogo, representando um comportamento que, em determinados momentos da aventura, será necessário para resolver algumas situações: o caminhar de um personagem humano.
Para isso, na aba Project, abra as pastas Assets, Multimedia, 3D e, por fim, Animacoes. Como fizemos em nosso encontro anterior, criaremos um novo Animator Controller para indicar aos nossos modelos quais estados de animação serão executados.
Clique em uma área vazia da janela e, no menu suspenso, selecione as opções Create e, em seguida, Animator Controller.
Conceda o nome “animControllerCaminhando01”, sem as aspas, ao novo controlador criado, conforme imagem a seguir exemplifica.
Clique duas vezes sobre animControllerCaminhando01 para iniciarmos sua configuração por meio da visualização disponibilizada pela aba Animator. Ainda com a pasta Animacoes aberta na aba Project, selecione o arquivo de animação animCaminhando (destacado em verde na imagem a seguir), clique e arraste seu ícone em direção a uma área vazia da janela Animator.
Uma caixa laranja será exibida no fluxo de animações. Selecione-a e renomeie-a para caminhandoState, conforme indicado a seguir:
Inicialmente, vamos programar o fluxo de animações para sempre repetir a recente animação inserida. Para isso, clique com o botão direito sobre a caixa laranja e selecione a opção Make Transition.
Após a última ação, clique novamente sobre a caixa laranja, utilizando agora o botão esquerdo do mouse. Uma pequena seta será exibida logo abaixo de caminhandoState, assim como quando realizamos a mesma ação para a animação de aceno das mãos, no encontro anterior. Essa seta representa uma transição entre estados de animação, nesse caso específico, entre o estado caminhandoState e ele mesmo.
Volte à visualização da aba Scene e, na lista de GameObjects da aba Hierarchy, selecione o objeto referente ao paciente (paciente_base). Na aba Inspector, troque o valor do parâmetro Controller de seu componente Animator para o recém-criado controlador (animControllerCaminhando01), conforme indicação a seguir:
Feita a alteração, que tal testarmos a execução do game para notarmos as diferenças entre as duas animações configuradas? Abra a aba Game e pressione o ícone do botão Play para ter uma grande surpresa:
Pois é, nosso personagem começou a caminhar e simplesmente foi embora da posição inicial. A título de curiosidade, experimente clicar sobre a aba Scene ainda com a simulação de execução em andamento para ver onde foi parar o serelepe paciente:
Pelo visto, seu desespero para ser tratado logo é tão grande que ele acabou atravessando até as paredes do consultório!
Brincadeiras à parte, posteriormente iremos codificar limites para a movimentação dentro do cenário, mas o comportamento observado foi útil para nos mostrar na prática como as animações podem modificar os parâmetros de posicionamento de um GameObject. Interrompa a simulação e volte à aba Scene.
Alternando entre animações
Quando formos codificar o comportamento dos modelos humanoides em relação à movimentação dentro do cenário, será importante que tenhamos uma forma de alternar entre estados de animação para cada personagem, permitindo, por exemplo, que Doutor Tratanildo caminhe apenas quando o jogador pressionar determinada tecla, permanecendo parado em pé em outras situações específicas.
O sistema de animações do Unity permite essa alternância, a partir da inserção e configuração de transição entre diferentes estados no fluxo de um Animator Controller.
Vamos visualizar como essa transição ocorre na prática, utilizando como modelo o Animator Controller que criamos em nosso encontro de hoje. Na aba Project, ainda com o conteúdo da pasta Animacoes em evidência, clique duas vezes sobre o ícone de animControllerCaminhando01. A janela Animator será aberta novamente.
A partir da aba Project, clique e arraste a animação de nome animParado para uma área vazia da janela Animator. Note que, dessa vez, uma caixinha na cor cinza foi inserida na janela. Selecione-a e renomeie-a para paradoState, conforme exemplificado pela imagem a seguir:
Selecione a transição que criamos anteriormente entre o estado caminhandoState e si mesmo (a seta abaixo da caixa laranja) e delete-a, pressionando o botão Del de seu teclado.
Vamos criar duas novas transições: a primeira, de caminhandoState (botão direito sobre o estado, opção Make Transition) para paradoState (clicando sobre o estado); e a segunda, de paradoState para si mesmo.
Ao final, teremos uma seta saindo de caminhandoState em direção a paradoState e outra pequena seta, logo abaixo de paradoState, além da seta previamente existente entre Entry e caminhandoState, assim como ilustrado a seguir:
Vamos ver o que aconteceu na prática com essas alterações? Vá até a aba Game e pressione o ícone do botão Play para realizar uma simulação de execução:
Respeitando o fluxo entre estados que criamos, o personagem inicialmente realizou a animação correspondente ao movimento de caminhada (caminhandoState) e, em seguida, repetiu indefinidamente a animação em que permanece parado em pé (paradoState).
Interrompa a simulação, pressionando novamente o ícone do botão Play. Volte à aba Scene e não se esqueça de salvar a cena (menu File, opção Save) e o projeto (menu File, opção Save Project) antes de fechar o editor.
Próximos passos
Realizamos hoje interessantes experimentos envolvendo a aplicação da mesma animação para modelos diferentes e também sobre a transição entre diferentes estados de animação dentro de um fluxo de controle.
Após os experimentos, podemos afirmar que, inevitavelmente, algumas perguntas bem interessantes acabam surgindo:
- Existe alguma forma de interferirmos nas transições de estado presentes em um Animator Controller?
- Qual a diferença entre animações representadas por caixinhas laranjas e por caixinhas cinzas no fluxo de animação?
Iremos responder a essas e outras dúvidas importantes em nosso próximo encontro, além de prosseguirmos com a configuração dos elementos de nossa enigmática aventura tridimensional.
Nosso próximo texto já encontra-se disponível, continue conosco nessa jornada de conhecimento e fique ligado sempre aqui no GameBlast!
Revisão: Davi Sousa