Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Atravessando o cenário

Os Zumbis atravessam o cenário todo, paredes, cercas e barrreiras mesmo estando com rigidbody e box collider. E o personagem principal também consegue atravessar algumas junções do cenário se tentar passar por elas depois de um tempo.

Link do projeto: https://1drv.ms/u/s!Avaa4LNvjV4ggr4OvEc9LL27kdgUPA?e=oxtYiC

4 respostas

Fala Gabriel, tudo bem?

Os zumbis estão atravessando parede pois o collider deles está marcado como trigger. Vá no prefab do zumbi, depois no Inspetor, vá no Capsule Collider e desmarque onde está escrito Is Trigger, isso irá resolver o problema dos zumbis atravessarem os colliders. Se você estiver curioso, a opção Trigger é marcada quando você não quer que seu objeto colida físicamente com outros, mas ainda quer calcular essa colisão para iniciar algum evento, por exemplo, quando você está jogando algum jogo e de repente inicia uma cutscene de um boss aparecendo. Possivelmente o player estava andando no mapa, e ali existia um GameObject vazio com um collider do tipo trigger, que iria ativar o evento quando o player colidisse com ele.

Sobre o player estar também atravessando os colliders quando você o força contra eles, vá nesse link: https://cursos.alura.com.br/forum/topico-minha-personagem-e-uma-fantasma-ajude-me-a-torna-la-real-176994. Esse é um problema mais chatinho, aqui o professor explicou várias formas para você conseguir resolver isso.

Oi Murilo, tudo bem?

Consegui arrumar o problema do zumbi, mas o problema do jogador ainda continua. Tentei várias das soluções do link que você me mandou, e a que quase resolveu o problema foi a de alterar o Max Depenetration Velocity para valores mais altos. Mas mesmo assim o personagem ainda atravessa algumas paredes e também não consegue retornar para a área inicial.

solução!

Gabriel, faz o seguinte, vai no script ControlaJogador, lá em Update(), nas linhas 29 e 30 tem os códigos de input, ao invés da função GetAxis, usa a GetAxisRaw. Depois vá no FixedUpdate(), e ao invés de movimentar o jogador usando: rigidbodyJogador.MovePosition(rigidbodyJogador.position + (direcao velocidade Time.deltaTime)); use o velocity.

Ficará assim:

void Update()
{
        float eixoX = Input.GetAxisRaw("Horizontal");
        float eixoZ = Input.GetAxisRaw("Vertical");
}

void FixedUpdate()
{
        rigidbodyJogador.velocity = direcao.normalized * velocidade;
}

Outro detalhe, de uma olhada em todos objetos com colisores e verifique se está tudo bem fechado, para não ter nenhum vão que o jogador possa passar.

Quando testei seu projeto, o colisor do estacionamento principal(onde o jogo começa) estava muito acima do chão, isso fazia com que o jogador andasse muito lentamente e após sair do estacionamento, ele não conseguia voltar. Para resolver isso, é so mover o colisor até a linha do chão.

Oi Murilo.

Agora sim deu tudo certo, o personagem está se comportando normalmente