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

Problemas com Movimentações e Colisões

Opa, Henrique, tudo certo?

Então, eu finalizei os cursos do jogo e, quando fui testar, percebi alguns "Bugs" que não estou sabendo como resolver ao certo.

O principal deles diz respeito à movimentação do jogador: Quando há alguns zumbis atacando ao mesmo tempo, talvez a partir de três ou mais, o jogador fica com uma movimentação própria e contínua gerando um efeito visual de deslizar pelo cenário até que colida com alguma coisa, isso meio que anula a força que produz esse movimento e o personagem volta ao normal (o efeito para).

Eu vi esse mesmo efeito, ou algum parecido, ser relatado nesse outro post: https://cursos.alura.com.br/forum/topico-rigibody-collider-dojogador-trombando-com-zumbi-57679

Seguindo as sugestões dadas lá, eu aumentei a massa do Rigidbody do personagem em relação à do zumbi para testar, acho que o efeito foi amenizado mas continuou. As outras sugestões eu não entendi muito bem ou não implementei direito. Daí eu tava afim de saber o que pode tá gerando esse efeito, pra entender mesmo, e como resolver de vez... Dá a impressão que fica alguma força acumulada das colisões com os zumbis, sei lá.

Outra coisa é sobre as colisões com o cenário, eu fiz um cenário meio diferente do teu nas aulas e tem uns locais que o jogador consegue ultrapassar mesmo quando teoricamente já não deveria, considerando os Colliders que estão lá. É como se o Capsule Collider tivesse alguma complicação com os Box Collider no cenário, tipo quando a movimentação do jogador é forçada contra a quina deles, ou contra dois objetos próximos que os Box Colliders podem estar se sobrepondo e tal.

Cheguei a adicionar alguns objetos a mais pelo cenário pra ter alguma colisão antes de chegar nesses locais. Mas esse tipo de coisa se resolve desse jeito mesmo, no teste e adição/ajuste de Colliders pelo cenário, ou tem alguma outra forma de otimizar o processo?

Valeu aí, se lembrar de alguma outra coisa eu comento depois.

4 respostas

Oi, Raul, essa parte de colisão envolve muito teste mesmo. Em jogos de corrida por exemplo sempre tem alguém que testaria correr sempre batendo nas laterais para ver se o jogador consegue atravessar.

Sobre o Rigidbody você pode aumentar a massa mesmo pra algo bem pesado como 100 e lembra da distancia em que o zumbi para ataca o nosso personagem? Você pode aumentar um pouco assim os zumbis não tocam o personagem.

Outra coisa que você pode fazer é no componente de Animator desmarcar Apply Root Motion porque isso faria com que as animações influenciassem na movimentação que não é algo que queremos nesse jogo.

Bom, qualquer outra coisa estamos por aqui! Bons estudos!

solução!

Então, eu havia aumentado a massa do Rigidbody para valores mais altos mesmo, o Animator já estava com a opção 'Apply Root Motion' desmarcado e também tinha ajustado a distância de alcance do zumbi para ele parar e atacar antes de colidir com o jogador. Mesmo assim, o problema acontecia quando eu movia o jogador provocando uma colisão com os zumbis em volta dele e também, depois notei, quando os próprios zumbis se colidiam entre si ao tentar perseguir o jogador.

Quando isso ocorria, jogador e zumbis eventualmente ficavam com a movimentação alterada como falei (os zumbis deslizavam pelo cenário e não conseguiam mais perseguir, até que colidiam com algo e voltava ao normal).

Eu acredito que resolvi isso colocando uns métodos na classe 'MovimentoPersonagem' para travar e destravar a posição, usando o FreezePosition no constraint do Rigidbody:

    public void TravarPosicao ()
    {   
        rigidbodyPersonagem.constraints = RigidbodyConstraints.FreezePosition;
    }

    public void DestravarPosicao()
    {
        rigidbodyPersonagem.constraints = constraintsPersonagem;
    }

Daí eu chamo esses métodos no OnCollisionExit() do jogador e zumbis pra meio que "anular" alguma força que tava alterando o movimento. (Como eles voltavam ao normal quando colidiam com algo, travar e destravar meio que simula isso):

    private void OnCollisionExit(Collision collision)
    {
    // Exemplo no jogador:
        movimentoJogador.TravarPosicao();
        movimentoJogador.DestravarPosicao();
    }

Tem algum problema fazer isso? Aqui meio que resolveu esse bug tanto no jogador quanto no zumbi pelo que testei haha =P

Não tem problema hehe, você pode também pode tentar zerar a velocidade do Rigidbody depois de colidir.

Ah beleza então, vi agora que zerar a velocidade funciona do mesmo jeito e faz mais sentido, valeu aí =)