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);
}
}