Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Zumbi sai reto e não vai no jogador.[CORRIGI]

Após a modificação no código os zumbis gerados não seguem o jogador e nem andam. São "arremessados" para frente pelo gerador.

Classe que controla o movimento:

public class ControlaMovimento : MonoBehaviour {
    private Rigidbody rigidbodyMovimento;

    void Awake()
    {
       rigidbodyMovimento = GetComponent<Rigidbody>();
    }

    public void MovimentoPersonagens(Vector3 direcao, float velocidade)
    {
       //Pega a posição atual do zumbi e soma com a direção do jogador e faz com que o zumbi ande de maneira normalizada (1)
       rigidbodyMovimento.MovePosition(rigidbodyMovimento.position + (direcao.normalized * velocidade * Time.deltaTime));
    }

    public void RotacionarPersonagens(Vector3 direcao)
    {
        Quaternion novaRotacao = Quaternion.LookRotation(direcao);
        rigidbodyMovimento.MoveRotation(novaRotacao);
    }
}

Classe de controle do Inimigo:

public class ControlaInimigo : MonoBehaviour {

    public GameObject Jogador;
    public float Velocidade = 6;
    private Animator animatorInimigo;
    private ControlaMovimento controlaMovimento;


    void Start () {
        Jogador = GameObject.FindWithTag("Jogador");
        int geraTipoZumbi = Random.Range(1, 28);
        transform.GetChild(geraTipoZumbi).gameObject.SetActive(true);


        animatorInimigo = GetComponent<Animator>();
        controlaMovimento = GetComponent<ControlaMovimento>();
    }

    void FixedUpdate()
    {
        //Distancia entre o jogador e o zumbi
        float distancia = Vector3.Distance(transform.position, Jogador.transform.position);

        Vector3 direcao = Jogador.transform.position - transform.position;
        //Função de rotação, pega a direção do jogador para o zumbi rotacionar.


      controlaMovimento.RotacionarPersonagens(direcao);

        if (distancia > 2.5)
        {

           controlaMovimento.MovimentoPersonagens( direcao, Velocidade);

            animatorInimigo.SetBool("Atacando", false);

        }
        else
        {
            animatorInimigo.SetBool("Atacando", true);
        }
    }

    void AtacaJogador ()
    {
        int dano = Random.Range(1, 3);
        Jogador.GetComponent<ControlaJogador>().TomarDano(dano);
    }
}
1 resposta
solução!

Corrigido.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software