Fiz tudo conforme dito na Aula 04 para corrigir o erro dos zumbis ficarem travados quando chegavam no ponto aleatorio. Porem mesmo com o codigo igual ao da aula, o zumbi continua com o mesmo problema.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ControlaZumbi : MonoBehaviour, IMatavel
{
[HideInInspector]
public GameObject Jogador;
[HideInInspector]
public Status StatusZumbi;
private MovimentarPersonagem movimentoPersonagem;
private AnimacoesPersonagem animacaoPersonagem;
public AudioClip SomDeMorte;
private Vector3 direcao;
private Vector3 posicaoAleatoria;
private float contadorVagar;
private float tempoEntrePosicoesAleatorias = 4;
void Start()
{
Jogador = GameObject.FindWithTag(Tags.Jogador);
movimentoPersonagem = GetComponent<MovimentarPersonagem>();
animacaoPersonagem = GetComponent<AnimacoesPersonagem>();
StatusZumbi = GetComponent<Status>();
GerarTipoZumbi();
}
void FixedUpdate()
{
//Movimenta o Zumbi em direção ao Jogador
float distancia = Vector3.Distance(transform.position, Jogador.transform.position);
if (distancia > 16)
{
Vagar();
}
else if (distancia > 3)
{
direcao = Jogador.transform.position - transform.position;
movimentoPersonagem.Movimentar(direcao, StatusZumbi.Velocidade);
animacaoPersonagem.Atacar(false);
}
else
{
animacaoPersonagem.Atacar(true);
}
//Rotaciona o Zumbi em direção ao Jogador
movimentoPersonagem.Rotacionar(direcao);
}
void Vagar()
{
contadorVagar -= Time.deltaTime;
if(contadorVagar <= 0)
{
posicaoAleatoria = AleatorizarPosicao();
contadorVagar += tempoEntrePosicoesAleatorias;
}
bool ficouPertoOSuficiente = Vector3.Distance(transform.position, posicaoAleatoria) <= 0.05;
if(ficouPertoOSuficiente == false)
{
direcao = posicaoAleatoria - transform.position;
movimentoPersonagem.Movimentar(direcao, StatusZumbi.Velocidade);
}
}
Vector3 AleatorizarPosicao()
{
Vector3 posicao = Random.insideUnitSphere * 10;
posicao += transform.position;
posicao.y = transform.position.y;
return posicao;
}
void AtacaJogador()
{
int dano = Random.Range(20, 31);
Jogador.GetComponent<ControlaJogador>().TomarDano(dano);
}
void GerarTipoZumbi()
{
int gerarTipoZumbi = Random.Range(1,28);
transform.GetChild(gerarTipoZumbi).gameObject.SetActive(true);
}
public void TomarDano(int dano)
{
StatusZumbi.Vida -= dano;
if(StatusZumbi.Vida <= 0)
{
Morrer();
}
}
public void Morrer()
{
Destroy(gameObject);
ControlaAudio.instancia.PlayOneShot(SomDeMorte);
}
}