Aprendendo a programar jogos em Unity: corrigindo parâmetros para impedir o atravessamento de paredes

Iremos implementar barreiras e configurar aspectos relativos aos objetos que compõem o cenário de nosso jogo.

em 06/10/2024
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Depois de uma extensa bateria de testes envolvendo aspectos importantes da funcionalidade de animações do Unity, tais como os aspectos de transição entre estados de animação que vimos no encontro anterior, iremos hoje iniciar a resolução de alguns problemas do projeto Consultório do Dr. Tratanildo que já nos perseguem há algum tempo, como por exemplo o fato de que nosso personagem pode atravessar paredes ao caminhar pelo cenário.


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. A partir do primeiro texto da série, você terá a oportunidade de aprender mais sobre como funciona a ferramenta e como ela pode pode nos auxiliar no processo de elaboração de games dos mais variados estilos.

Aprenderemos desde conceitos mais simples, como os que envolvem a instalação e a configuração da ferramenta nos computadores, até tópicos mais elaborados, envolvendo a elaboração de cenas, a inserção de personagens, imagens e sons, além da programação “de fato”, codificando os scripts controladores dos comportamentos de cada elemento que estiver presente dentro de nossas aventuras.

Venha conosco nesta caminhada rumo a novos conhecimentos!

Elementos cenográficos e barreiras

Anteriormente, durante os testes de animação que realizamos com o modelo tridimensional que representa o paciente, percebemos que, caso deixemos o boneco caminhar indefinidamente pelo cenário, muito provavelmente ele irá atravessar o cenário, “furando” a parede e indo parar nos confins do universo virtual:

Esse tipo de comportamento certamente não está entre os que esperamos para o nosso jogo, sobretudo quando implementarmos no game formas de o jogador percorrer o cenário controlando o personagem Doutor Tratanildo. Portanto, iniciaremos hoje nossas atividades delimitando o espaço em que os personagens poderão transitar no cenário, por meio do uso de Colliders a serem acrescidos a alguns dos objetos do consultório.

Para tal, vamos abrir nosso projeto para edição, indo ao Unity Hub e clicando 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:

Temos diversos elementos em nosso cenário que poderão servir como “barreiras” para impedir que os personagens caminhem para fora do ambiente de ação do game, tais como as paredes, pilastras e outros elementos estruturais. Vamos inserir para alguns desses objetos componentes do tipo Box Collider, a fim de impedir os comportamentos indesejados.

Na aba Hierarchy, selecione os GameObjects listados a seguir, que estão atualmente subordinados a Ambientacao, que por sua vez é subordinado a CenarioFixo:
  • Quina_1, Quina_2, Quina_3 e Quina_4;
  • Parede_1, Parede_2, Parede_3 e Parede_4;
  • Janela_1 e Janela_2;
  • Porta_1;
  • Pilastra_1, Pilastra_2, Pilastra_3 e Pilastra_4.
Na aba Inspector, iremos clicar em Add Component e selecionar um componente do tipo Box Collider. Note que, agora, todos os objetos selecionados apresentam colisores tridimensionais.

Um detalhe curioso é que os valores dos atributos Center (X, Y, Z) e Size (X, Y, Z) aparecem com uma barra em suas caixas de edição. Isso se deve ao fato de que existem valores diferentes para cada componente Box Collider de cada GameObject selecionado.


Esses valores foram concedidos automaticamente pelo Unity com base nas dimensões dos modelos das quinas, paredes, janelas, pilastras e porta utilizados. Podemos notar isso pelas finas linhas verdes que circundam cada objeto, como exemplificado na imagem a seguir. Estando elas com dimensões parecidas aos objetos aplicados, não precisamos alterar os valores dos atributos de cada Box Collider.

Ajustes nos colisores

Agora, iremos implementar colisores para outros elementos importantes de nosso cenário, que não desejamos que sejam “atropelados” por nenhum personagem em suas trajetórias de deslocamento.

Na aba Hierarchy, selecione os GameObjects listados a seguir, também subordinados a Ambientacao como os objetos os quais receberam alterações agora há pouco:
  • Biombo_1 e Biombo_2;
  • Planta_1, Planta_2, Planta_3 e Planta_4.
Na aba Inspector, insira, para o conjunto de objetos selecionados, componentes do tipo Box Collider. Note que, diferentemente do que observamos anteriormente, as dimensões dos colisores não estão alinhadas ao tamanho de cada objeto:

A adequação automática das dimensões de um Collider ao objeto a que foi atrelado pode acabar não ocorrendo por diversos fatores, sendo um deles a composição do objeto por múltiplos GameObjects subordinados, como é o caso dos objetos que representam os biombos e as plantas.

Considerando isso, o Unity permite que realizemos alterações para as dimensões dos Colliders manualmente, por meio da modificação dos valores de seus atributos Center (X, Y, Z) e Size (X, Y, Z).

Na aba Hierarchy, selecione simultaneamente Biombo_1 e Biombo_2. Na aba Inspector, altere os valores dos atributos descritos a seguir:
  • Center X = 0, Y = 1.75, Z = 0;
  • Size X = 2.75, Y = 3.25, Z = 0.3.
Agora sim esses GameObjects estão com colisores adequados às dimensões de cada modelo, certo? Iremos fazer o mesmo para os objetos que representam as plantas.

Na aba Hierarchy, selecione simultaneamente Planta_1, Planta_2, Planta_3 e Planta_4. Na aba Inspector, altere os valores dos atributos descritos a seguir:
  • Center X = 0, Y = 0, Z = 0.01;
  • Size X = 0.0075, Y = 0.0075, Z = 0.02.

Mais uma vez, temos objetos com colisores condizentes às reais dimensões de cada vaso, o que será muito importante para o projeto em breve.

Quebrando a (quarta) parede

Para vermos de forma mais ampla como se comportam os objetos que sofreram intervenções hoje, vamos posicionar a câmera principal num ângulo mais favorável à observação das interações.

Na aba Hierarchy, selecione o GameObject Main Camera, subordinado a Cameras. Na aba Inspector, altere os valores dos atributos de seu componente Transform conforme indicado a seguir:
  • Position X = -14.5, Y = 5, Z = -5;
  • Rotation X = 0, Y = 90, Z = 0.
Feito tudo isso, agora é a “hora da verdade”: vá à aba Game e pressione o ícone do botão Play para observar o comportamento do personagem em relação aos objetos recém-fortalecidos:

Pois é, nada mudou! O paciente continua indo em frente, “quebrando a parede” e rumando ao infinito, desta vez até mais rapidamente do que antes, devido às alterações que realizamos em nosso último encontro, ao modificarmos o valor do parâmetro Passo_caminhada do controlador de animações para 5. O que pode ter ocorrido então?

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

Iremos descobrir muito em breve que as alterações que realizamos não foram em vão, pois a presença de colisores nos elementos do cenário irá, sim, influenciar no comportamento dos personagens humanoides da cena após realizarmos ajustes nos componentes dos próprios personagens.

Portanto, em nosso próximo encontro, iremos tirar do papel essas necessárias modificações para que o teimoso paciente inicial de nossa aventura pare de atravessar paredes e objetos. Spoiler: o segredo está no uso adequado de Colliders e de Rigidbodies.

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

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.