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

Chefe com rotação estranha.

O chefe está dando um giro muito repentino, como um flick, ele esta em uma posição e do nada está virada para outra.

6 respostas

Oi, Kim e quando isso acontece?

Personagem tá perto ele, ou ele tá longe e vira do nada?

Sim ele está perto do Jogador, quando o jogador dá a volta nele, ele dá um flick para girar.

Oi, Kim, tudo bem?

Então eu recomendo aumentar um pouco a stopping distance (bem pouco mesmo) da navmesh do chefe. O pode estar acontecendo é que ele começa a atacar mas aí ele cancela o ataque porque o jogador saiu de perto a mesmo que por milímetros e aí a navmesh volta e o jogador entra na área novamente então o personagem volta a querer rotacionar pela nossa lógica e atacar.

Talvez isso solucione o problema. Qualquer coisa também você pode fazer um .zip do seu projeto e subir no Google Drive, Dropbox, ou algo que permita acesso público que posso dar uma olhada aqui em alguns outros detalhes.

Eu tentei mexer stopping distance, mas não teve efeito. Tambem percebi um novo bug, sempre que o Boss termina a ação de atacar, o jogador toma dano, não importa se o jogador desviar.

Link do projeto: https://drive.google.com/file/d/1iyd7CySTEyefb1FYkDWVG5gcYrkaa42J/view?usp=sharing

solução!

Oi, Kim, tudo bem?

Algumas coisas que a gente pode melhorar e isso vale pro projeto do curso também. Podemos passar essa parte de movimentação e rotação do Update para o FixedUpdate só isso já melhora MUITO a rotação.

Mas se você quiser deixar ela mais suave você pode mudar o jeito que a gente faz a rotação pra usar uma função que suaviza tipo o RotateTowards.

    public void Rotacionar(Vector3 direcao)
    {
        var speed = 20;
        Vector3 novaDirecao= Vector3.RotateTowards(transform.forward, direcao, speed * Time.deltaTime, 0.0f);
        Quaternion novaRotacao = Quaternion.LookRotation(novaDirecao);
        meuRigidbody.MoveRotation(novaRotacao);
    }

Pra resolver esse segundo problema do jeito que a gente fez não tem muito como, porque a gente usou evento de animação. Então se tocou ou não não importa muito, se você quiser mudar essa lógica você pode criar um colisor na ponta do machado e receber o dano quando esse colisor toca a personagem.

Ou pra resolver minimamente passar aquele evento de animação mais pro final da animação porque ai você garante que ela não foi cancelada por um movimento do personagem e realmente rodou.

Não ficou perfeito, mas deu uma boa melhorada. Obrigado.