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 a 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 de 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ê quer 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 à 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, embora 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 se trata 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, devido às 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 esse 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.

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
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).