Boa noite.
Ao fazer as alterações para que os zumbis se movam de forma aleatoria, eles ficam apenas parados, e comecam a perseguir o jogador quando ele chega muito perto. Deve haver algo errado com Vagar(), mas estou tendo dificuldade em achar o problema
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ControlaInimigo : MonoBehaviour, IMatavel
{
public GameObject Jogador;
private AnimacaoPersonagem animacaoInimigo;
private MovimentaPersonagem movimentaInimigo;
private Status statusInimigo;
public AudioClip SomMorte;
private Vector3 posicaoAleatoria;
private Vector3 direcao;
private float contadorVagar = 0;
private float tempoEntrePosicoesAleatorias = 4;
// Start is called before the first frame update
void Start()
{
Jogador = GameObject.FindWithTag(Tags.Jogador);
aleatorizarZumbi();
animacaoInimigo = GetComponent<AnimacaoPersonagem>();
movimentaInimigo = GetComponent<MovimentaPersonagem>();
statusInimigo = GetComponent<Status>();
}
// Update is called once per frame
void FixedUpdate()
{
float distancia = Vector3.Distance(transform.position, Jogador.transform.position);
movimentaInimigo.Rotacionar(direcao);
animacaoInimigo.AnimarMovimento(direcao);
if (distancia > 15)
{
Vagar();
}
else if (distancia > 2.5)
{
direcao = Jogador.transform.position - transform.position;
movimentaInimigo.Movimentar(direcao, statusInimigo.Velocidade);
animacaoInimigo.Atacar(false);
}
else
{
animacaoInimigo.Atacar(true);
}
}
Vector3 AleatorizarPosicao()
{
Vector3 posicao = Random.insideUnitSphere * 10;
posicao += transform.position;
posicao.y = transform.position.y;
return posicao;
}
void AtacaJogador()
{
int dano = Random.Range(10, 20);
Jogador.GetComponent<Controla_Jogador>().TomarDano(dano);
}
private void aleatorizarZumbi()
{
int geraTipoZumbi = Random.Range(1, 28);
transform.GetChild(geraTipoZumbi).gameObject.SetActive(true);
}
public void TomarDano(int dano)
{
statusInimigo.Vida -= dano;
if(statusInimigo.Vida <= 0)
{
Morrer();
}
}
void Vagar()
{
contadorVagar -= Time.deltaTime;
if(contadorVagar <= 0)
{
posicaoAleatoria = AleatorizarPosicao();
contadorVagar += tempoEntrePosicoesAleatorias;
}
bool ficouPertoOSuficiente = Vector3.Distance(transform.position, posicaoAleatoria) <= 0.05;
if(ficouPertoOSuficiente)
{
direcao = posicaoAleatoria - transform.position;
movimentaInimigo.Movimentar(direcao, statusInimigo.Velocidade);
}
}
public void Morrer()
{
Destroy(gameObject);
ControlaAudio.instancia.PlayOneShot(SomMorte);
}
}