Quando eu coloco o jogo para rodar, o Zumbi cria os pontos aleatórios, vai até eles, mas quando chega ele não para de andar naquela direção, ele segue reto até o fim e nunca para, só quando o contador chega a 0 e ele tem que ir atrás de outra posição.
Provavelmente deve ser um erro bobo que eu não estou conseguindo enxergar.
Meu código:
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Script_Inimigo_Controle : MonoBehaviour, Interface_Matavel { private Vector3 direcao; private Vector3 posicaoAleatoria;
public float distanciaAteOndeVaga = 10;
private float contadorVagar;
private float tempoVagando = 4;
public GameObject Jogador;
public AudioClip SomDeMorte;
private Script_Movimento movimentar;
private Script_Animação animar;
private Script_Status status;
void Start()
{
Jogador = GameObject.FindGameObjectWithTag("Jogador");
movimentar = GetComponent<Script_Movimento>();
animar = GetComponent<Script_Animação>();
status = GetComponent<Script_Status>();
ZumbisDiferentes();
}
void Update()
{
}
void FixedUpdate()
{
float distancia = Vector3.Distance(transform.position, Jogador.transform.position);
movimentar.Girando(direcao);
animar.Movimentar(direcao.magnitude);
if (distancia > 15)
{
Vagar();
}
else if (distancia > 2)
{
Perseguir();
}
else
{
animar.Atacar(true);
}
}
void Perseguir()
{
direcao = Jogador.transform.position - transform.position;
status.Velocidade = 5.0f;
movimentar.Girando(direcao);
movimentar.Movendo(direcao, status.Velocidade);
animar.Atacar(false);
}
void Vagar()
{
contadorVagar -= Time.deltaTime;
status.Velocidade = 1.5f;
if (contadorVagar <= 0)
{
posicaoAleatoria = AleatorizarPosicao();
tempoVagando = Random.Range(1, 4);
contadorVagar += tempoVagando;
}
bool pertoSuficiente = Vector3.Distance(transform.position, posicaoAleatoria) <= 0.05;
if (pertoSuficiente == false)
{
direcao = transform.position - posicaoAleatoria;
movimentar.Girando(direcao);
movimentar.Movendo(direcao, status.Velocidade);
}
}
Vector3 AleatorizarPosicao()
{
Vector3 posicao = Random.insideUnitSphere * distanciaAteOndeVaga;
posicao += transform.position;
posicao.y = transform.position.y;
return posicao;
}
void AtacaJogador()
{
int danoZumbi = Random.Range(20, 35);
Jogador.GetComponent<Script_Jogador>().TomarDano(danoZumbi);
}
void ZumbisDiferentes()
{
int gerarTipoDeZumbi = Random.Range(1, 28);
transform.GetChild(gerarTipoDeZumbi).gameObject.SetActive(true);
}
public void TomarDano(int Dano) { status.Vida -= Dano; if (status.Vida <= 0) { Morrer(); } }
public void Morrer()
{
Destroy(gameObject);
Script_Audio_Controle.instancia.PlayOneShot(SomDeMorte);
}
}