🤯 Preciso de ajuda para corrigir um erro de colisão: A bala está atravessando paredes do cenario

Fala pessoal, estou fazendo um projeto de estudo aqui onde o jogador controla um canhão e tem várias paredes espalhadas pelo cenário.

O jogador dispara o canhão e a bola deve bater nas parecer e acertar o alvo vermelho. Mas quando eu lanço a bola ela está atravessando a parede, se lanço ela devagar vai normal.

Alguém tem uma sugestão de como corrigir isso??

2 curtidas

Esse problema de um objeto com física atravessar outros objetos quando é lançado com muita velocidade é um clássico! No seu caso, quando a bola se move muito rápido, o cálculo de colisão pode não detectar que ela deveria bater na parede.

Uma das maneiras de lidar com isso é ajustar o Collision Detection do Rigidbody da bola para Continuous Dynamic. Isso faz com que o Unity faça um esforço extra para checar colisões de objetos que se movem rapidamente. É só configurar assim:

  1. Selecione o objeto da bola no Unity.
  2. Vá até o componente Rigidbody e mude o Collision Detection para Continuous Dynamic.
  3. Se as pareces se mexerem no jogos, certifique-se também que elas estejam com o Collision Detection ajustado para Continuous ou Continuous Speculative.

Se isso ainda não resolver, você pode tentar diminuir a velocidade da bola ou aumentar a taxa de atualização dos frames de física do seu jogo (o Fixed Timestep nas configurações do Time), para ter mais “checks” de colisão por segundo.

Você pode ajustar o “Fixed TimeStep” nas configurações de Physics (Edit > Project Settings > Time), basta colocar um valor menor para aumentar a precisão da simulação física, mas isso pode aumentar a carga de processamento.

Porque esse problema acontece?

A Unity, assim como muitos outros motores de jogos, usa um sistema de física baseado em um passo de tempo discreto, conhecido como “Fixed Timestep”. A cada intervalo de tempo fixo, a física do jogo é atualizada. Isso significa que a posição e a velocidade dos objetos são calculadas e aplicadas periodicamente. Se um objeto se move muito rapidamente, a posição é atualizada em grandes saltos. Se, entre dois desses saltos, um objeto passa completamente através de outro objeto (como uma parede), a colisão pode não ser detectada.

A maioria dos motores de jogo, incluindo a Unity, utiliza uma combinação de “Discrete Collision Detection” (DCD) e “Continuous Collision Detection” (CCD) para contornar/resolver esse problema.

2 curtidas

vlw, deu certo aqui! :muscle:

2 curtidas