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

Mai 5, 2025 - 00:08
 0
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 lugar

Ao 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 utilizando duas animações, representadas em tela pelos retângulos de nome caminhandoState e paradoState:

O que pode ter ocorrido para que o comportamento indesejado surgisse é um “descompasso” entre as animações dos dois estados, no que se refere à pose inicial ou final de cada uma delas na animação.

Se um dos estados “entrega” o modelo ao próximo estado alguns centímetros acima ou abaixo da próxima posição inicial, esse deslocamento no eixo Y aplicado de forma cíclica pode acabar fazendo com que o objeto em cena mude de posição indesejadamente, como está ocorrendo no momento ao caminharmos pelo cenário com Tratanildo.

O ajuste dessas posições iniciais é realizado diretamente na animação importada pelo Unity. Vamos começar ajustando os parâmetros da animação representada pelo estado caminhandoState: na aba Project, ainda com a pasta Animacoes aberta, selecione o ícone da animação animCaminhando.

Na aba Inspector, selecione a opção Animation. Role a tela para baixo e, dentro da seção Root Transform Position (Y), modifique o valor de alguns dos parâmetros:
  • Bake Into Pose: deixe a caixa de seleção marcada (true);
  • Based Upon (at Start): escolha a opção Feet.
Por fim, clique na opção Apply, conforme exemplo ilustrado a seguir:


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.

Aplicaremos as mesmas alterações para a animação representada pelo estado de nome paradoState: na aba Project, selecione agora o ícone da animação animParado.

Verifique se os valores presentes nos parâmetros Bake Into Pose e Based Upon (at Start) da seção Root Transform Position (Y) estão diferentes do que indicamos agora há pouco para animCaminhando; caso estejam, altere-os para os novos valores e clique em Apply:


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:

Agora sim, temos um médico com os pés no chão de forma constante, sem precisarmos para isso alterar parâmetros da gravidade. Interrompa a simulação, clicando novamente sobre o ícone do botão Play e retornando à aba Scene.

Paciente nos ares

Não adiantará nada corrigirmos o comportamento do médico se deixarmos nosso paciente voando como um balão de gás hélio dentro do consultório, não é mesmo? O processo de correção de seu comportamento será semelhante ao que fizemos para o GameObject de Tratanildo.

Na aba Hierarchy, selecione o objeto paciente_base, subordinado a Pacientes que, por sua vez, encontra-se subordinado a Personagens. Na aba Inspector, certifique-se de que, dentro da estrutura de seu componente Animator, o controlador da animação atrelado é animControllerPacienteBase:

Na aba Project, ainda com a pasta Animacoes em evidência, clique duas vezes sobre o ícone de animControllerPacienteBase para conferirmos suas configurações na janela da aba Animator:

Diferentemente do fluxo de animações atrelado ao GameObject do médico, temos apenas um estado de animação ativo, sendo representado pelo retângulo de nome dandoTchau, cujo comportamento se repete ao final da execução da animação.

A princípio, não temos problemas de posicionamento na transição entre estados de animação, justamente por tratar-se de uma animação sendo repetida após ela própria. Para esse caso, a alteração que realizaremos corrigirá o comportamento “congelando” a influência da animação no posicionamento (eixo Y) do objeto em cena.

Na aba Project, selecione agora o ícone da animação animTchau. Na aba Inspector, selecione a opção Animation e, dentro da seção Root Transform Position (Y), realize as mesmas intervenções que aplicamos às animações atreladas ao doutor em seus atributos (Bake Into Pose = true e Based Upon (at Start) = Feet), clicando em Apply ao final do processo:

Experimente simular a execução do game e note que já não temos mais um paciente voando por aí:

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

Realizamos alterações importantes que trazem de volta à normalidade o comportamento dos principais personagens presentes em nosso cenário, o que é essencial para avançarmos em nossa aventura. Mesmo assim, alguns bugs teimam em permanecer nos atrapalhando, como o congelamento repentino dos braços de Doutor Tratanildo em momentos específicos de seu deslocamento:

Em nossos próximos encontros, corrigiremos esse e outros comportamentos estranhos de nosso excêntrico médico, além de darmos sequência ao processo de implementação da coleta dos medicamentos pelo cenário.

Nosso próximo encontro será no dia 11 de maio. Até mais! Fique sempre ligado nas novidades do GameBlast!

Revisão: Ives Boitano