Aprendendo a programar jogos em Unity: correções para as colisões entre personagens e elementos do cenário

Modificaremos parâmetros no projeto para solucionarmos problemas relacionados à colisões entre objetos do cenário.

em 16/08/2026
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Após implantarmos, em nosso encontro anterior, alterações no projeto que viabilizaram a criação de um modo de dificuldade elevado para o game, realizaremos hoje correções importantes em parâmetros relacionados ao módulo de física do Unity, visando reduzir a ocorrência de bugs envolvendo colisões entre o médico e os itens pertencentes a seu consultório.

Se esta for a primeira vez que você lê conteúdos de nossa série, considere-se especialmente convidado a conhecer mais sobre esta jornada de aprendizados práticos, mergulhando de cabeça no mundo do desenvolvimento de jogos digitais.

Por meio da elaboração de diferentes projetos, aprendemos a cada encontro sobre como ferramentas de desenvolvimento de jogos, como a Unity, podem nos auxiliar a tirar do papel games dos mais variados estilos gráficos e de gameplay.

A partir do primeiro tópico da série, abordamos desde a instalação e a configuração da ferramenta em nossos computadores, até tópicos envolvendo os mais variados métodos, técnicas e procedimentos utilizados por estúdios de desenvolvimento no mundo todo para a criação de jogos 2D e 3D. Colocando a mão na massa, encaramos desafios que envolvem a criação de fases, de regras e de metas para um jogo; a codificação de scripts controladores dos elementos em cenários; a elaboração de menus e  de interfaces de interação entre o jogador e os desafios virtuais; dentre outros.

Até o momento, já produzimos dois jogos durante nossa jornada, de nomes Motorista da Pesada e Forest Ping Pong. São dois games 2D, cujos aspectos de gameplay remetem a clássicos dos arcades e dos videogames, como Pong (Atari, 1972) e City Connection (Jaleco, 1985). 

O projeto em que estamos trabalhando atualmente chama-se Consultório do Dr. Tratanildo. Trata-se de um jogo ambientado em um consultório médico tridimensional, cujo gameplay mescla referências a jogos dos anos 1980 e 1990, como Dr. Mario (Nintendo, 1990), Pac-Man (Namco, 1980) e Tama (Time Warner Interactive, 1994). 


Muitos dos conceitos abordados na concepção de um jogo acabam sendo válidos para os demais, por isso, recomendo fortemente que acompanhe, a partir do índice disponibilizado no primeiro texto da série, os passos realizados para a construção dos três games. Também é possível experimentar os dois primeiros jogos completos, diretamente de seu navegador, acessando os últimos textos relacionados a eles.

Se você tem a vontade de tirar do papel os games que sempre sonhou em tornar realidade, a hora é agora: prepare as malas e venha conosco em uma estrada repleta de novos conhecimentos e de muita diversão!

Em queda livre

Em circunstâncias normais, nosso jogo funciona de forma bem adequada, permitindo ao jogador coletar as pílulas pelo cenário e utilizá-las para os tratamentos dos pacientes. Porém, por termos dado liberdade ao jogador para que possa investigar todos os cantos do consultório de Tratanildo Doencita, é possível perceber que existem bugs relacionados ao processo de colisão entre o médico e os limites do cenário que, no pior dos casos, podem fazer com que nosso querido protagonista atravesse paredes e sofra quedas impressionantes.

Esse tipo de situação pode ocorrer em um game devido a diferentes fatores, tais como as configurações relacionadas a interação física entre objetos e o formato dos colisores dos objetos que estão interagindo entre si.

Existem diferentes abordagens para resolver problemas desse tipo, sendo que nem sempre a mais adequada a um cenário é aplicável a todos os casos. Em nosso projeto, atuaremos em três frentes:
  • Correção do formato e das dimensões de Colliders dos objetos;
  • Restrições de movimentação do personagem principal no eixo Y; e
  • Modificações em parâmetros do Unity, relacionados à detecção de colisões.
Essas alterações visam tanto impedir que o médico acabe por atravessar as paredes e os objetos acidentalmente, quanto evitar que ele sofra uma “queda livre”, caso uma situação como esta venha a ocorrer inesperadamente.

Vamos iniciar as intervenções necessárias, abrindo o 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 Unity, na aba Project, abra a pasta Assets e, em seguida, Scenes. Clique duas vezes sobre o ícone da cena ConsultorioScene.

Inicialmente, vamos realizar correções envolvendo aspectos de elementos estáticos do cenário, como paredes, janelas e biombos. Na aba Hierarchy, selecione o seguinte conjunto de objetos do cenário fixo, subordinados ao GameObject Ambientacao:
  • Parede_1;
  • Parede_2;
  • Parede_3;
  • Parede_4;
  • Janela_1;
  • Janela_2;
  • Porta_1.
Em seguida, na aba Inspector, localize o componente de tipo Box Collider atrelado aos objetos. Modifique o valor do parâmetro Size Z para 0.02, conforme ilustrado a seguir. Caso queira enxergar os limites dos colisores sendo alterados, clique sobre o botão da opção Edit Collider.

Essa modificação visa dar uma “engordada” na grossura dos Colliders, diminuindo a possibilidade de que elementos externos venham a transpassar seus limites visuais.

Em seguida, selecione o seguinte conjunto de objetos do cenário fixo, também subordinados ao GameObject Ambientacao:
  • Pilastra_1;
  • Pilastra_2;
  • Pilastra_3;
  • Pilastra_4.
Para esses objetos, será necessário modificar tanto o valor do parâmetro Size Z de seu componente Box Collider (novo valor = 0.02) quanto o do parâmetro Size X (novo valor = 0.05).

A seguir, selecione os objetos Biombo_1 e Biombo_2, subordinados ao GameObject Ambientacao. Realize as seguintes modificações aos valores dos parâmetros de seu componente Box Collider:
  • Center X = 0.1, Y = 1.75, Z = 0;
  • Size X = 3.1, Y = 3.25, Z = 0.5.
O conjunto dos objetos que receberam ajustes nos parâmetros de seus componentes de tipo Box Collider são aqueles com maior potencial de serem impactados por colisões com o personagem principal do jogo.

O chão, embora também seja um objeto de contato constante com o médico, não sofrerá intervenções, pois realizaremos ajustes ao GameObject de Tratanildo que impedirão em definitivo seu deslocamento no eixo Y, aproveitando o fato de termos desenhado um consultório sem escadas ou desníveis. É uma abordagem válida para nossa situação, mas que pode não ser aplicável em jogos em que o personagem principal pule, suba escadas ou rampas.

Ajustando o doutor

Após reforçarmos os colisores dos objetos cenográficos, vamos ajustar parâmetros relacionados ao dono do consultório. Na aba Hierarchy, selecione o objeto DoutorCenario, subordinado a Doutores, dentro do grupo de GameObjects Personagens

Para que possamos enxergá-lo adequadamente durante as intervenções, na aba Inspector, clique sobre a caixa de seleção em destaque a seguir para deixá-lo ativo no cenário.

A primeira intervenção será para viabilizar a já citada “trava” no posicionamento em eixo vertical do GameObject. Na aba Inspector, localize o componente de tipo Rigidbody e, em seguida, no grupo de atributos Constraints, deixe selecionada a opção Freeze Position Y. Além disso, modifique o valor do parâmetro Collision Detection para Continuous, conforme ilustra a imagem a seguir.

A modificação do valor do parâmetro Collision Detection serve para indicar ao Unity que trata-se de um objeto dinâmico no cenário, que precisa de um acompanhamento mais detalhado da engine de física em relação às colisões que venha a realizar ou sofrer.

O valor originalmente concedido (Discrete) é mais adequado a objetos estáticos, como paredes e outros elementos do cenário, pois demanda menos processamento do jogo durante as rotinas de cálculos físicos.

Ainda com DoutorCenario em evidência, vamos modificar o tipo de colisor atrelado ao objeto no momento. Como implementamos métodos de controle do personagem pelo cenário que permitem ao jogador movimentá-lo e rotacioná-lo livremente, em algumas situações específicas as arestas de seu Box Collider podem vir a colidir com os demais elementos do cenário. Para evitar esse problema, vamos utilizar um colisor em formato cilíndrico, cobrindo o perímetro de giro do personagem.

Na aba Inspector, localize o componente de tipo Box Collider, clique com o botão direito sobre seu título e selecione a opção Remove Component.


Em seguida, por meio do botão Add Component, adicione um componente de tipo Capsule Collider. Conceda os seguintes valores a seu conjunto de atributos:
  • Center X = 0, Y = 0.0375, Z = 0.003;
  • Radius = 0.025;
  • Height = 0.075.
Por fim, desative o GameObject novamente, por meio da caixa de seleção ao lado do nome do objeto, na aba Inspector.

Experimente a execução do jogo, indo à aba Game e clicando sobre o ícone do botão Play:

A cartada final

Dependendo das regiões do cenário em que você realizou o teste de colisão entre o personagem principal e os elementos estáticos do cenário, já é possível perceber uma melhora significativa no bloqueio, baseado nas intervenções que realizamos até o momento. Mesmo assim, persistem alguns “pontos cegos” no consultório, em que, dependendo do ângulo de câmera adotado e da persistência do jogador em tentar “furar os bloqueios”, ainda é possível transpassar os objetos, como podemos notar pela imagem ilustrativa a seguir.

O que ocorre é que, sob determinadas circunstâncias, a velocidade com que o objeto do médico tenta transpassar o objeto bloqueante aparenta ser superior a da força adotada em sentido contrário, fazendo com que, com certa insistência, seja possível vencer os bloqueios que configuramos anteriormente, e, no pior dos casos, impedir que o jogador conclua a aventura, caso saia do perímetro delimitado para o consultório.

Como uma cartada final contra os insistentes caçadores de bugs que, com certeza, tentarão realizar esta e outras peripécias contra a “ordem natural” das atividades em nosso game, vamos ajustar o parâmetro do projeto que controla justamente a velocidade da força aplicada contra o objeto do médico, durante as colisões com outros elementos do cenário.

Interrompa a simulação, clicando novamente sobre o ícone do botão Play e retornando à aba Scene. Em seguida, clique sobre o menu Edit e selecione a opção Project Settings. Na coluna à esquerda, selecione a opção Physics e, em seguida, altere o valor do parâmetro Default Max Depenetration Velocity para 100.

Esse parâmetro determina um valor máximo para a velocidade de retorno aplicada automaticamente a objetos que venham a tentar penetrar Colliders de outros objetos. Ajustando este valor para cima, equilibraremos a balança de forças entre um doutor que insiste em querer romper as barreiras de seu consultório e os elementos físicos do cenário.

Realize novos testes e experimente novamente tentar avançar sobre os elementos cenográficos de nosso consultório, utilizando diferentes métodos de controle em cada tentativa.

Interrompa a simulação de execução, clicando novamente sobre o ícone do botão Play e retornando à aba Scene. Não se esqueça de salvar a cena (menu File, Save) e o projeto (menu File, Save Project) antes de fechar o Unity.

Próximos passos

Finalmente, nos debruçamos sobre um dos principais bugs de nosso projeto, cuja presença poderia inviabilizar a conclusão da aventura em diferentes casos, frustrando (e com razão) a jogatina dos gamers fissurados em tratamentos médicos virtuais.

A conclusão da construção de nosso jogo está se aproximando, e nos próximos encontros daremos sequência à configuração dos elementos de interface restantes, tais como as telas de pause e de créditos do game.

Nos encontraremos novamente no próximo dia 23 de agosto. Até mais! Fique ligado sempre nas novidades do GameBlast!

Revisão: Ives Boitano
Siga o Blast nas Redes Sociais
Rodrigo Garcia Pontes
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. Você pode compartilhar este conteúdo creditando o autor e veículo original (BY-SA 4.0).