Aprendendo a programar jogos em Unity: o mistério dos personagens que voam sem asas
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Após iniciarmos, no encontro anterior, a construção da funcionalidade de coleta das pílulas presentes no consultório pelo personagem principal de nossa aventura, realizaremos hoje interessantes intervenções no projeto, visando consertar bugs que estão assolando Doutor Tratanildo e seus pacientes no consultório.Caso essa seja a primeira vez que você acessa conteúdos de nossa série, não se acanhe: junte-se a nós em uma divertida jornada de aprendizados sobre o universo do desenvolvimento de jogos digitais.Por meio da elaboração de diferentes projetos práticos, estamos aprendendo a utilizar a ferramenta Unity para nos auxiliar a desenvolver games dos mais variados estilos. Abordamos desde a concepção inicial de uma aventura até a codificação de seus elementos internos, suas regras e seus objetivos.No momento, estamos trabalhando no projeto Consultório do Dr. Tratanildo, um jogo ambientado em um consultório médico tridimensional cujo estilo de gameplay mescla características de adventures e puzzles famosos dos anos 1980 e 1990, como Dr. Mario (Nintendo, 1990) e Pac-Man (Namco, 1980).Não se preocupe se você não tem conhecimentos prévios sobre programação de jogos ou de sistemas, pois nossa série é desenvolvida justamente pensando em quem quer tirar seu primeiro game do papel mas ainda não sabe por onde começar.A partir do primeiro texto, são abordados desde os tópicos mais básicos do processo de criação de um game, como a instalação e a configuração da ferramenta Unity em nossos computadores, até as etapas mais importantes da construção de um jogo virtual, como a inserção dos elementos multimídia nas fases (imagens, sons e modelos 3D) e a codificação dos comportamentos e regras do jogo, por meio da criação de scripts controladores.Venha conosco para que possamos seguir juntos nesta trilha rumo a novos conhecimentos!Tem gente voando neste lugarAo final de nosso encontro anterior, pudemos perceber que, embora estivesse funcionando bem o que nos propusemos a implementar até então, algo de estranho estava ocorrendo com os personagens dentro do consultório:Por algum motivo estranho, tanto Doutor Tratanildo quanto o paciente que acenava ao lado do leito começaram a voar, fazendo parecer até se tratar de uma cena tirada do filme “A Fantástica Fábrica de Chocolate”.No caso do personagem que retrata o médico andando pelo cenário, note que sua levitação ocorre apenas enquanto o modelo encontra-se caminhando pelo cenário, pois, ao cessar sua movimentação, seu pouso ocorre sobre o chão do consultório:Tudo leva a crer se tratar de algo relacionado às animações atreladas a cada um dos elementos em cena. Para desvendarmos o mistério dos personagens “flutuantes” do game, vamos abrir 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, selecione o GameObject DoutorCenario, subordinado a Doutores que, por sua vez, encontra-se subordinado a Personagens.Existem diferentes formas de se solucionar a questão dos “voos indesejados”, sendo o desligamento da gravidade para o GameObject em questão uma das mais simples e diretas. Na aba Inspector, deixe vazia a caixa de seleção do atributo Use Gravity de seu componente Rigidbody.Experimente simular a execução do jogo, indo à aba Game e clicando sobre o ícone do botão Play:Aparentemente, os voos do médico foram interrompidos, o que resolveria nosso problema. Porém, desligar a gravidade de um objeto em cena pode trazer outros comportamentos indesejados, por exemplo, na interação entre colisores de GameObjects diferentes. Além disso, é uma alternativa não tão prática em situações em que, ao contrário de nosso consultório, tenhamos diferentes níveis de chão ou a presença de rampas e de escadas.Vamos interromper a simulação da execução para resolvermos a questão de outra forma, sem precisar desligar a gravidade para o objeto. Para tal, clique novamente sobre o ícone do botão Play e retorne à aba Scene.Na aba Hierarchy, volte a selecionar DoutorCenario. Na aba Inspector, deixe novamente selecionada a caixa de seleção do atributo Use Gravity de seu componente Rigidbody.Ainda na aba Inspector, note que, dentro da estrutura do componente Animator, o controlador da animação atrelado à DoutorCenario é animControllerCaminhando01:Vamos abrir o fluxo do controlador de animações para alterarmos alguns parâmetros de interação entre os estados e as transições. Para tal, na aba Project, abra as pastas Assets, Multimedia, 3D e, por fim, Animacoes. Clique duas vezes sobre o ícone de animControllerCaminhando01 para realizarmos edições nos fluxos de animação via janela da aba Animator:Recordando o que elaboramos há algum tempo atrás, para compor o comportamento do médico durante a caminhada no consultório, estamos

Não se preocupe se você não tem conhecimentos prévios sobre programação de jogos ou de sistemas, pois nossa série é desenvolvida justamente pensando em quem quer tirar seu primeiro game do papel mas ainda não sabe por onde começar.
Tem gente voando neste lugar
Ainda na aba Inspector, note que, dentro da estrutura do componente Animator, o controlador da animação atrelado à DoutorCenario é animControllerCaminhando01:
Vamos abrir o fluxo do controlador de animações para alterarmos alguns parâmetros de interação entre os estados e as transições. Para tal, na aba Project, abra as pastas Assets, Multimedia, 3D e, por fim, Animacoes. Clique duas vezes sobre o ícone de animControllerCaminhando01 para realizarmos edições nos fluxos de animação via janela da aba Animator:
- Bake Into Pose: deixe a caixa de seleção marcada (true);
- Based Upon (at Start): escolha a opção Feet.
Essas alterações que realizamos informam ao Unity que devemos considerar a pose inicial baseada nos pés do modelo (feet) e que não haverá modificações cumulativas na posição em eixo Y do objeto animado.
Vamos simular a execução do game para vermos se Tratanildo parou de voar por conta própria, indo à aba Game e clicando sobre o ícone do botão Play: