Aprendendo a programar jogos em Unity: Rigidbody e Colliders em cenas tridimensionais

Iniciaremos os preparativos para adicionar elementos de física aos objetos da cena principal do game.

em 04/08/2024
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Em nosso encontro anterior, finalizamos a construção dos elementos que compõem o leito hospitalar do cenário de Consultório do Dr. Tratanildo, além de organizarmos a hierarquia dos objetos presentes adequadamente na cena principal. Hoje, iniciaremos o processo de inserção de elementos importantes de controle dos aspectos da física do jogo, tais como Rigidbody e Colliders.


Se esta é a primeira vez que você acessa nossa série, aproveite e junte-se a nós nesse divertido processo de aprendizado. Desenvolvendo “do zero” diversos projetos práticos, você poderá conhecer melhor sobre as diversas funcionalidades que a ferramenta Unity nos apresenta para a criação de jogos dos mais variados estilos.

A partir do primeiro tópico da série, iremos juntos configurar e instalar a ferramenta em nossos computadores e, a partir daí, aprender bastante sobre os diferentes aspectos de codificação e criação de elementos que a utilização do Unity nos proporciona, tais como o desenvolvimento de scripts controladores de objetos e a construção da ambientação de fases e cenas.

Mesmo que você nunca tenha tido contato com conceitos de programação de jogos, esta é uma ótima oportunidade para aprender, passo a passo, a tirar do papel aqueles jogos que sempre sonhou em tornar realidade. Aperte os cintos e venha conosco nesta caminhada rumo a novos conhecimentos!

Mergulho sem fim

Com exceção dos pacientes da clínica, já temos os principais elementos cenográficos de nossa aventura devidamente posicionados de forma estática. Porém, sabemos que, muito em breve, teremos de configurar aspectos importantes de diversos objetos do game para dar vida e movimento ao tão bonito consultório que construímos juntos.

É importante começarmos, então, a verificar como estão se comportando nossos GameObjects em relação à física que pretendemos implementar no game. 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.

Iremos começar configurando alguns detalhes iniciais da física do personagem principal. Na aba Hierarchy, selecione o GameObject Doutor_rindo, subordinado a Personagens

Na aba Inspector, clique sobre o botão Add Component. No menu suspenso, selecione a opção Physics e, em seguida, Rigidbody. Um componente semelhante ao apresentado na seguir será adicionado ao objeto.

Ao inserirmos um Rigidbody, o GameObject sofrerá influência do sistema de física do Unity a partir dos valores configurados para os atributos de seus parâmetros. Por exemplo: apresentando-se valor positivo para o parâmetro Use Gravity, o objeto em questão tenderá a se deslocar para baixo, sofrendo ação gravitacional.

Um Rigidbody é o equivalente em um cenário tridimensional ao componente Rigidbody 2D que usamos anteriormente na construção do game Motorista da Pesada. Por falar em nosso saudoso jogo motorizado, vamos relembrar o que aconteceu ao inserimos um Rigidbody 2D no GameObject do personagem principal e realizarmos a simulação da execução do game:

Pois é, o carrinho desceu continuamente, sumiu de nossa visão e só parou sua queda ao interrompermos a simulação da execução.

Considerando que, em uma cena tridimensional, o comportamento de um Rigidbody é equivalente ao apresentado pelo Rigidbody 2D de nosso projeto anterior, que tal testarmos a execução do game atual para vermos o que, de fato, irá ocorrer? Para isso, vá até a aba Game e pressione o ícone do botão Play:

Como num passe de mágica, o objeto que representa Doutor Tratanildo no cenário desceu às profundezas do cenário sem nem se preocupar com o chão, como em um mergulho sem fim no abismo... Vamos configurar, então, componentes adicionais para o doutor em questão e, também, para o chão do cenário.

Após a reprodução da simulação de execução, interrompa-a clicando novamente no ícone do botão Play e retorne à aba Scene.

Barrando a queda

Na aba Hierarchy, selecione novamente Doutor_rindo. Na aba Inspector, clique sobre o botão Add Component. No menu suspenso, selecione a opção Physics e, em seguida, Box Collider.


Iremos utilizar componentes do tipo Collider tanto para o objeto que representa o médico quanto para o chão do consultório, permitindo ao Unity saber que o GameObject Doutor_rindo não deve transpassar o solo ao tocar o outro objeto.

Existem diversos tipos de Colliders, tais como o Box Collider, o Capsule Collider e o Sphere Collider. O que os diferencia, de fato, é a forma geométrica de cada elemento, sendo escolhido pelo programador aquele que mais for conveniente à situação.

Como curiosidade, para fins computacionais, dentre os tipos apresentados anteriormente, o Box Collider é o que exige menos processamento do aparelho em que o jogo está rodando, pois, ao se efetuar os cálculos internos para determinar se um GameObject tocou em outro ou não, a geometria de um cubo é simples o bastante para ajudar a agilizar os processos matemáticos envolvidos.

Voltando ao nosso caso concreto, após adicionar o componente Box Collider, configure os valores de seus parâmetros conforme segue:
  • Is Trigger = false;
  • Center X = 0, Y = 0.0375, Z = 0.003;
  • Size X = 0.01, Y = 0.075, Z = 0.01.
Para verificar qual a área que o Box Collider cobre em relação ao objeto, experimente clicar no botão à direita de Edit Collider. Veja, na cena, que um cubo verde é apresentado: é essa a área de interação do Box Collider.

Agora, na aba Hierarchy, selecione o GameObject Chao, que encontra-se subordinado a Ambientacao dentro da árvore hierárquica de CenarioFixo:

Adicione um BoxCollider ao objeto, da mesma forma que fizemos anteriormente com Doutor_rindo. Os valores dos parâmetros do BoxCollider de Chao serão os descritos a seguir:
  • Is Trigger = false;
  • Center X = 0.07, Y = 0.05, Z = 0;
  • Size X = 0.435, Y = 0.365, Z = 0.

Para vermos bem de perto as interações dos objetos, na aba Hierarchy selecione Main Camera (subordinado a Cameras) e modifique os valores dos atributos de seu componente Transform conforme indicado a seguir:
  • Position X = 3, Y = 5, Z = -7.
Por fim, vamos experimentar a execução do game, indo à aba Game e pressionando o ícone do botão Play.

Como pudemos perceber, nada aconteceu, e isso é muito bom, pois significa que os BoxColliders dos dois objetos estão funcionando adequadamente, impedindo um mergulho sem fim do objeto referente ao médico no fundo do cenário.

Interrompa a execução da simulação e volte à aba Scene para averiguarmos um interessante mistério.

Um “tropicão” daqueles

Na aba Hierarchy, vamos selecionar novamente Doutor_rindo. Na aba Inspector, altere os valores dos atributos de seu componente Transform conforme indicado a seguir:
  • Position X = 13, Y =1, Z = -15.
O objeto será posicionado bem acima da quina de BaseCama. Feita a alteração, vamos simular novamente a execução do game. Preste atenção no que irá ocorrer com o objeto em cena e com os valores dos parâmetros de Transform:

Foi uma queda e tanto, não?! Mas, além do tombo feio, surgem dois mistérios interessantes:
  • Por que, durante a queda, houve a modificação tanto de valores do atributo Position quanto de Rotation do componente Transform?
  • Por que Doutor_rindo sofreu influência de BaseCama ao cair se não adicionamos manualmente o componente BoxCollider ao referido GameObject?
Esses mistérios serão desvendados em nosso próximo encontro! 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 com física no ambiente tridimensional de Consultório do Dr. Tratanildo, configurando o comportamento de objetos por meio da inserção de componentes e da edição de seus atributos.

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.