Aprendendo a programar jogos em Unity: uma caminhada segura rumo às paredes do consultório

Iremos corrigir alguns parâmetros do GameObject de nosso paciente para que ele possa caminhar adequadamente pelo cenário.

em 13/10/2024
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Finalizamos nosso encontro anterior com a "pulga atrás da orelha"; afinal, realizamos diversas alterações em parâmetros de paredes e objetos do consultório e, mesmo assim, o objeto que representa nosso paciente continuou a atravessar paredes:

Hoje iremos verificar que, na verdade, bastam pequenos ajustes aos componentes do GameObject do personagem para que ele possa reagir adequadamente aos colisores inseridos nos demais elementos que sofreram interação anteriormente.

Caso esta seja a primeira vez que você acessa a série, sinta-se convidado a vir conosco em uma trajetória repleta de conteúdos interessantes sobre desenvolvimento de jogos. No momento, estamos desenvolvendo o projeto Consultório do Dr. Tratanildo, uma divertida experiência em um ambiente tridimensional que está nos proporcionando a obtenção de novos conhecimentos na elaboração de cenários e de gameplay 3D.


A partir do primeiro texto da série, você terá a oportunidade de pôr a mão na massa em diferentes projetos de desenvolvimento de jogos, aprendendo mais sobre como funciona a ferramenta Unity e descobrindo como ela pode nos auxiliar a tirar do papel games dos mais variados estilos.

Abordamos desde os conceitos iniciais, que envolvem a instalação e a configuração da ferramenta em nossos computadores, até os que, de fato, nos permitirão aprender a programar um jogo, criar cenários, posicionar elementos, configurá-los e, por fim, dar vida a diferentes aventuras e desafios.

Venha conosco nesta caminhada rumo a novos conhecimentos!

Um caminho sem fim

Diversos elementos de nosso cenário já estão configurados para responder adequadamente a uma colisão, tais como as paredes, vasos, biombos e janelas, conforme fomos adicionando componentes do tipo Collider aos seus respectivos objetos:

O que, de fato, fez com que o objeto que representa nosso paciente ignorasse todas as configurações realizadas foi a ausência de dois tipos de componente atrelados a seu GameObject: um Collider e um Rigidbody.

Relembrando um pouco do que vimos em encontros anteriores, para que os elementos de um cenário interajam adequadamente com a engine de física do Unity, precisamos indicar quais são as “barreiras” que determinam os limites de colisão de um objeto, indicados pelos limites de um Collider, e, caso seja aplicável, quais são as características físicas de fato do objeto, tais como sua massa e se é suscetível à ação da gravidade, por meio dos parâmetros de um componente do tipo Rigidbody.

Sendo assim, vamos realizar o ajuste de algumas características do GameObject de nosso paciente abrindo o projeto para edição. Para isso, 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 que a aba Scene esteja em evidência, conforme ilustrado a seguir:

Na aba Hierarchy, selecione o objeto paciente_base, subordinado a Pacientes, que, por sua vez, encontra-se subordinado ao GameObject Personagens.


Na aba Inspector, clique sobre o botão Add Component. Insira um componente do tipo Capsule Collider, conforme indicado na imagem:


Os valores dos parâmetros do novo componente a serem modificados são os listados a seguir:
  • Center X = 0, Y = 0.1, Z = 0;
  • Radius = 0.06;
  • Height = 0.2;
  • Direction = Y-Axis.

Note que nosso personagem está agora envolto em um colisor em formato de cápsula, como as linhas verdes da imagem a seguir mostram:

A utilização de colisores nesse formato pode facilitar o manejo do personagem ao realizamos sua movimentação pelo cenário próximo a outros objetos e, também, ao realizarmos curvas e rotações. Isso deve-se ao fato de que um Capsule Collider não apresenta as mesmas “quinas” de um Box Collider, por exemplo.

Note a seguir a diferença entre os colisores do objeto que representa Doutor Tratanildo (um Box Collider) e o atrelado ao paciente. Posteriormente, iremos corrigir determinados aspectos do colisor também para o GameObject Doutor_rindo.

Agora, volte a selecionar paciente_base via aba Hierarchy. Na aba Inspector, adicione um componente do tipo Rigidbody:


A princípio, vamos manter os parâmetros-padrão do componente para estudarmos o comportamento do objeto no cenário ao testarmos a execução do jogo.


Antes de realizarmos a simulação da execução, para que possamos notar como a animação do personagem irá influenciar na sequência de ações a ser observada, vamos realizar um pequeno ajuste na animação atrelada a paciente_base.

Na aba Project, abra as pastas Assets, Multimedia, 3D e, por fim, Animacoes. Clique duas vezes sobre o ícone do controlador animControllerCaminhando01 e, na janela da aba Animator, altere o valor do Parameter Passo_caminhada para 2:

Agora sim, com tudo configurado e organizado, vá à aba Game e pressione o ícone do botão Play:

Pois é, nosso paciente agora está mais enfermo do que nunca, depois de um tropeção desse! Interrompa a execução da simulação e volte à aba Scene para entendermos o que ocorreu.

Resolvendo o mistério do tombo

Os componentes que são configurados para receber influência do sistema de física do Unity, por padrão, ao receberem interações com outros elementos, podem sofrer modificações nos valores de diferentes parâmetros de seus componentes Transform, tais como os que envolvem o posicionamento e a rotação do GameObject em questão.

Em nosso caso concreto, quando o personagem iniciou sua interação com o Box Collider do objeto Chao (tanto pela ação gravitacional quanto pela animação de caminhada), devido ao formato do colisor utilizado para o boneco (com as extremidades mais “finas” do que a região central), houve um desequilíbrio tal no posicionamento que acarretou o tombamento do personagem para frente, alterando os valores de rotação de seu Transform para os eixos X e Z.

Para solucionar esta questão, basta indicarmos ao Unity que, nas interações entre o Rigidbody do boneco e o ambiente, não serão alterados os valores de rotação para os dois eixos indicados. Faremos isso selecionando paciente_base (via aba Hierarchy) e, na aba Inspector, deixaremos selecionados os itens Constraints Freeze Rotation X e Z:

Experimente simular a execução do game. Note que, além do personagem não tombar mais para a frente nem para os lados, ao chegar próximo à parede, seu deslocamento é interrompido, realizando de fato o que planejamos até o momento.

Interrompa a simulação da execuçã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

Agora que corrigimos os fatores que levavam nosso paciente a atravessar paredes e, posteriormente, a tombar com a cara no chão, em nossos próximos encontros, iremos aplicar os mesmos conceitos ao GameObject que representa nosso destemido médico e também prosseguiremos com a configuração do ambiente físico e da interação entre os elementos de cena e os personagens de nosso game.

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

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. Escrevemos sob a licença Creative Commons BY-SA 3.0 - você pode usar e compartilhar este conteúdo desde que credite o autor e veículo original.