Caso esta seja a primeira vez que você acessa nossa série, sinta-se à vontade para juntar-se a nós em um divertido processo de aprendizagem. A partir do primeiro texto da série, iremos aprender de forma prática diferentes conceitos sobre como a ferramenta Unity pode nos auxiliar a elaborar jogos dos mais diferentes estilos de gameplay.
Mesmo que você não tenha experiências prévias em desenvolvimento de games, não se acanhe: no início da série, abordamos desde os tópicos mais básicos, como as etapas de instalação e configuração da ferramenta em nossos computadores, até etapas mais concretas do processo de criação de um jogo, como a elaboração de cenas, a inserção de elementos multimídia (como imagens e sons) e a codificação dos scripts que controlam os comportamentos e regras de uma aventura virtual.
Venha conosco nesta caminhada rumo a novos conhecimentos!
Transições de estado e parameters
Após as experimentações realizadas em nosso encontro anterior, duas questões vieram à tona a partir da observação dos comportamentos apresentados pelos personagens nas simulações de execução realizadas:
- 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?
Hoje, iremos responder na prática à primeira das duas perguntas, e já adianto: sim, é possível realizarmos intervenções nos fluxos de estados (animações) de um Animator Controller de diferentes formas.
Uma das formas mais diretas e simples de se realizar esse tipo de intervenção é por meio da implementação de parameters (parâmetros), uma funcionalidade que o Unity apresenta dentro da estrutura dos Animator Controllers para que possamos indicar ao game a existência de variáveis específicas cujos valores podem determinar qual transição será aplicada a partir do término da execução de um determinado estado.
Que tal colocarmos em prática essa possibilidade, adicionando e configurando parameters em um de nossos controladores? Vamos então iniciar os experimentos de hoje; abra o Unity Hub e clique 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 Project, abra as pastas Assets, Multimedia, 3D e, por fim, Animacoes. Clique duas vezes sobre o ícone do elemento animControllerCaminhando01, conforme ilustrado na imagem a seguir:
A janela da aba Animator estará em evidência na tela, contendo o fluxo de estados (animações) que delineamos anteriormente. Note que, no canto superior esquerdo da janela de Animator, existe um botão de nome Parameters. Clique sobre o botão para iniciarmos a inserção de parâmetros em nosso fluxo.
O primeiro parâmetro que iremos configurar terá relação com a velocidade da caminhada ao se executar a animação desse tipo de interação. Será um parâmetro numérico, do tipo float, que terá dois papeis bem definidos:
- Determinar a velocidade do deslocamento do personagem que receberá a animação de caminhada;
- Possibilitar ao jogo alternar entre as animações caminhandoState e paradoState, dependendo de seu valor.
Para criar o referido parameter, clique sobre o botão “+” (em destaque na imagem a seguir), selecione o tipo Float e, por fim, conceda o nome “Passo_caminhada”, sem as aspas, para o novo parâmetro criado:
Note que, ao lado de Passo_caminhada, temos disponível uma caixa de texto que poderemos utilizar para alterar o valor padrão do parameter.
Agora, vamos criar transições de estado adicionais entre caminhandoState e paradoState para que possamos usar o novo parâmetro como fator de transição entre os dois estados. Para isso, clique com o botão direito sobre caminhandoState e selecione a opção Make Transition.
Após a última ação, clique novamente sobre caminhandoState, mas desta vez com o botão esquerdo do mouse. Um pequeno triângulo será apresentado, indicando a criação de uma transição de repetição entre um estado e ele mesmo. Por fim, crie mais uma transição, desta vez partindo de paradoState em direção a caminhandoState.
Ao final, teremos duas linhas indicando transições entre estados (destacadas em azul na imagem a seguir), além de dois “triângulos” que representam as transições de repetição (destacados em vermelho):
Configurando conditions
Clique sobre a seta que parte de caminhandoState em direção a paradoState. Note que ela será exibida em tela na cor azul claro, além de serem exibidas algumas informações sobre a transição na aba Inspector.
No final dos elementos presentes em Inspector, temos presente uma seção de nome Conditions. Nessa seção, poderemos configurar quais parâmetros irão ativar a transição em questão.
Clique sobre o botão “+” da seção Conditions (em destaque, na imagem a seguir). Serão apresentadas em tela três caixas de inserção de textos: na primeira, clique e selecione o item Passo_caminhada; no segundo, selecione a opção Less e, na terceira, insira o valor 0.1, conforme a imagem a seguir:
Com essas ações, determinamos a condição que permitirá a execução da transição entre estados: somente se o valor armazenado pelo parâmetro Passo_caminhada for menor do que 0.1 sairemos da execução de caminhandoState para paradoState.
Como temos duas transições com ponto de origem em caminhandoState (caminhandoState → paradoState, caminhandoState → caminhandoState), precisamos ainda indicar ao Unity qual a ordem de prioridade entre as transições, para que, caso uma transição não seja executada, o jogo saiba o que deve de fato fazer.
Para isso, clique sobre a caixinha laranja caminhandoState e, na aba Inspector, certifique-se de que, na seção Transitions, a transição caminhandoState → paradoState esteja em primeiro lugar na lista; caso não esteja, clique e arraste para cima o símbolo do lado esquerdo do elemento (destacado em azul na imagem a seguir):
Vamos realizar também as configurações referentes à transição entre paradoState e caminhandoState. Clique sobre a seta que representa essa transição e, na seção Conditions da aba Inspector, defina a seguinte regra:
- 1º campo (parameter): Passo_caminhada;
- 2º campo (comparação): Greater;
- 3º campo (valor): 0.1.
A regra será bem semelhante ao que fizemos anteriormente: somente haverá transição de paradoState para caminhandoState se o valor de Passo_caminhada for maior do que 0.1.
Indique a ordem de preferência da execução de transições também para paradoState, clicando sobre sua caixinha e, na aba Inspector, rearranjando o elemento paradoState → caminhandoState acima de paradoState → paradoState.
Por fim, para atender à segunda característica de Passo_caminhada (controlar a velocidade da caminhada do personagem), vamos selecionar a caixinha laranja de caminhando_state e, na aba Inspector, deixar marcada a opção Parameter do lado direito de Multiplier, logo abaixo de Speed.
A caixa de seleção (destacada em verde na imagem anterior) será habilitada, permitindo selecionarmos a opção Passo_caminhada.
Dessa forma, dependendo do valor concedido ao parameter Passo_caminhada, a velocidade da caminhada do personagem também será afetada.
Primeiros experimentos
Vamos realizar alguns ajustes na cena para que possamos visualizar melhor a influência das alterações que realizamos no encontro de hoje. Volte à aba Scene e, na aba Hierarchy, selecione Main Camera, subordinado a Cameras. Na aba Inspector, modifique os valores do parâmetro Position de seu elemento Transform, conforme descrito a seguir:
- Position X = -7;
- Position Y = 5;
- Position Z = 6.
Volte à aba Animator e, na extremidade esquerda da janela, modifique o valor destinado ao parameter Passo_caminhada para 0.5:
Agora, experimente simular a execução do game, indo à aba Game e pressionando o botão Play:
Note que de fato houve uma redução significativa na velocidade de deslocamento do personagem que representa o paciente na cena. Posteriormente, iremos modificar dinamicamente via scripts o valor desse parameter, permitindo o controle adequado do deslocamento dos personagens dentro do consultório.
Pare a simulação da execução e experimente agora alterar o valor de Passo_caminhada para 0.08 e iniciar nova simulação. Observe o interessante comportamento do personagem:
Além da maior redução na velocidade, em determinado momento há a transição entre estados desejada: o personagem para de andar e permanece imóvel no cenário depois de terminada a execução da animação de caminhada.
Interrompa novamente a simulação da execução. 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
Em nosso próximo encontro, daremos prosseguimento aos experimentos, observando alguns comportamentos de transição de estados e realizando ajustes bem-vindos para que possamos controlar posteriormente as animações de nossos personagens da melhor forma, além de responder à tão esperada segunda pergunta levantada ao término do encontro anterior.
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