Aprendendo a programar jogos em Unity: mais correções para a movimentação dos personagens

Continuaremos a corrigir determinados comportamentos indesejados que ocorrem durante a movimentação do médico pelo cenário.

Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Após realizarmos, no encontro anterior, importantes correções para estabilizar o comportamento dos personagens no cenário, fazendo-os parar de flutuar pelo consultório, iremos corrigir outro bug também relacionado às animações de movimentação de Doutor Tratanildo.

Caso hoje seja a primeira vez que você tem contato com os conteúdos de nossa série, sinta-se especialmente convidado a nos acompanhar em uma divertida jornada de aprendizados sobre o universo do desenvolvimento de games.

Elaborando diferentes projetos práticos, estamos desenvolvendo jogos dos mais variados estilos gráficos e de gameplay, o que nos está proporcionando a oportunidade de aprender diferentes conceitos, como sobre a codificação das regras e dos objetivos de um game, sobre a inserção em cena de diferentes elementos multimídia e sobre como podemos criar interações entre os diferentes elementos que compõem uma aventura.

No momento, estamos trabalhando no projeto Consultório do Dr. Tratanildo, um puzzle ambientado em um consultório médico tridimensional, estrelado por Doutor Tratanildo, um excêntrico médico cujo objetivo de vida é tratar seus pacientes no menor tempo possível por meio do uso de suas miraculosas pílulas de saúde.


A partir do primeiro texto, são abordados desde os tópicos básicos de nossa jornada de aprendizado, como a instalação e configuração da ferramenta Unity em nossos computadores, até as etapas mais desafiadoras do processo, como a criação de scripts controladores de comportamentos dos elementos em cena e a disposição adequada de imagens, sons e modelos 3D nas fases de cada game proposto.

Venha conosco para que possamos seguir juntos nesta trilha rumo a novos conhecimentos!

Uma estranha paralisia

Após a normalização do comportamento “flutuante” do médico e de seu paciente em cena, temos outro desafio a tratar também relacionado ao deslocamento dos personagens em cena: em determinados momentos, ao se interromper a movimentação de Doutor Tratanildo pelo consultório, ele permanece com o corpo todo congelado, sem executar movimentos nem do estado de animação caminhandoState, nem de paradoState, conforme podemos verificar a seguir:

Ao analisar mais a fundo o erro, podemos perceber que o problema ocorre apenas ao término da execução da animação de caminhada, quando se está finalizando a execução do estado de animação caminhandoState e pretende-se avançar ao estado paradoState.

Nesse caso em específico, o fluxo de animação acaba ficando “preso” durante a transição entre estados, efetivamente deixando o modelo tridimensional congelado, como podemos notar pela simulação de execução retratada na gravação a seguir:

Para desvendarmos mais esse mistério, não temos outra escolha senão abrirmos nosso projeto para edição: no Unity Hub, clique duas vezes sobre o item referente ao projeto Consultório do Dr. Tratanildo. Na interface inicial do editor, na aba Project, abra a pasta Assets, Scenes e, por fim, clique duas vezes no ícone da cena ConsultorioScene.

Na aba Project, abra as pastas Assets, Multimedia, 3D e, por fim, Animacoes. Clique duas vezes sobre o ícone do controlador de animações animControllerCaminhando01 para realizarmos ajustes em alguns de seus parâmetros via janela da aba Animator.

Inicialmente, clique sobre a pequena seta localizada abaixo do retângulo que representa o estado CaminhandoState, destacada em verde na imagem a seguir:

Na aba Inspector, clique sobre a opção Settings e, na lista de opções apresentadas logo após o item, modifique o valor da opção Interruption Source para Next State.

A alteração realizada permitirá ao fluxo de animações entender que a prioridade na transição entre estados é seguir para o próximo estado do fluxo (Next State), impedindo indefinições como a que ocorre ao se solicitar transição entre estados “andando” e “parado” no período final da execução do estado anterior.

Para que o fluxo seja configurado adequadamente, vamos repetir a operação para as demais setas que representam as transições entre estados. Selecione a seta que vai de caminhandoState para paradoState e realize a mesma intervenção na aba Inspector:

Selecione agora a seta localizada abaixo de paradoState e, novamente, altere o valor da opção Interruption Source para Next State também via aba Inspector:

Por fim, selecione a seta que liga paradoState a caminhandoState e realize novamente a intervenção proposta:

Com todas as transições devidamente configuradas, que tal testarmos a simulação da execução do game para vermos se o comportamento foi corrigido? Para tal, vá até a aba Game e clique sobre o ícone do botão Play:

Na ilustração anterior, podemos notar que, mesmo estando a execução da animação próxima ao fim para caminhandoState, a transição entre estados ocorre sem sobressaltos, o que é ótimo, pois evita que haja conflito na execução do fluxo de animações, visto que, por si só, ele não teria condições de decidir se repetiria a execução do estado corrente (por estar no final de sua execução) ou se partiria para o próximo estado (por termos interrompido o pressionamento da tecla “seta para cima”).

Interrompa a simulação, clicando novamente sobre o ícone do botão Play. 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

Concluímos, hoje, uma rodada importante de correções de bugs em nosso projeto. É importante, sempre que possível, corrigirmos comportamentos indesejados no projeto de nossos games, pois, por vezes, esses erros podem interferir no comportamento não apenas da funcionalidade afetada, mas, também, de outros módulos e funcionalidades que dependam de um bom funcionamento do game em geral.

Nos próximos encontros, prosseguiremos implementando funcionalidades importantes em nosso game, como a efetiva coleta dos medicamentos e o código que permitirá introduzirmos as pílulas de saúde no organismo do paciente a ser tratado.

Nosso próximo texto já encontra-se disponível, continue conosco nessa jornada de conhecimento e fique ligado sempre aqui no GameBlast!

Revisão: Ives Boitano
Siga o Blast nas Redes Sociais
Rodrigo Garcia Pontes
Entendo videogames como sendo uma expressão de arte e lazer e, também, como uma impactante ferramenta de educação. No momento, doutorando em Sistemas da Informação pela EACH-USP, desenvolvendo jogos e sistemas desde 2020. Se quiser bater um papo comigo, nas redes sociais procure por @RodrigoGPontes.
Este texto não representa a opinião do GameBlast. Somos uma comunidade de gamers aberta às visões e experiências de cada autor. Você pode compartilhar este conteúdo creditando o autor e veículo original (BY-SA 3.0).