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

Zumbis andando sempre na mesma direção no modo "Vagar"

Minha função de gerar direção aleatória está exatamente igual a escrita no vídeo e a direção está sendo gerada corretamente (desenhei uma linha com o Debug.DrawLine) porém o zumbi não quer seguir a linha enquanto no modo "Vagar".

A primeira suspeita que tive foi a de que algum outro ponto do código estava fazendo o zumbi andar com direções diferentes mas me certifiquei que o único ponto onde a função de movimento está sendo usada é no método de vagar.

Aqui o meu projeto até então: https://drive.google.com/file/d/1harZ7QX0sziPZpz8BPZERtM9dtCnteWw/view?usp=sharing^

EDIT: Versão correta do projeto: https://drive.google.com/file/d/16ubwzO6ofiAWBvP-xhx8E-BPgN0Ltr1U/view?usp=sharing

6 respostas

Oi, Enzo, tudo bem?

O seu projeto parece estar numa versão diferente porque o Vagar não parece estar implementado.

O único erro que notei foi nesse código:

        if (distance > 2.6)
        {
            _movement.Move(direction, Velocity);
            _animation.Attack(false);
        }
        else
            _animation.Attack(true);

O true e false do ataque estavam em ordem contraria.

Perdão professor, mandei a versão errada mesmo. A mais atual é essa: https://drive.google.com/file/d/16ubwzO6ofiAWBvP-xhx8E-BPgN0Ltr1U/view?usp=sharing

Oi, Enzo, tudo bem?

Acho que ficou faltando "normalizar" a posição aleatória baseada na posição do personagem. Porque ela tem que sempre ficar sendo atualizada pro vetor direção ficar correto.

Você pode salvar a posição aleatória numa outra variável e fazer isso antes de pedir pro personagem se mover.

_movementDirection =  _randomPosition - transform.position;

Mas professor, eu não to já gerando a posição aleatória a partir da posição do zumbi?

Vector3 RandomizePosition()
{
    var position = transform.position + Random.onUnitSphere * 15;
    position.y = transform.position.y;

    return position;
}

Pelo que entendi a variável position ta recebendo a posição atual do personagem (transform.position) somado de uma posição aleatória (Random.onUnitSphere) vezes o raio da esfera. Por quê eu precisaria subtrair de novo a posição do zumbi?

Sim, porque o que você quer no final não é uma posição. Você quer um vetor que aponta para essa posição, então se fosse não faz essa substração você teria um vetor que parte do (0, 0, 0).

Queremos na verdade um vetor que aponta da posição do zumbi (e deve ser alterado a cada vez que ele se movimenta) para a posição final que é o destino. Então mesmo que essa posição tenha sido criada com referencia na posição dele naquele momento não quer dizer que o vetor direção vai apontar corretamente porque a posição dele vai mudar a medida que ele se move.

solução!

Professor, consegui resolver o problema. Porém não posso te dizer como pois também não sei, foi na sorte.

Agradeço a atenção!!