Por algum motivo o eixo y fica mudando, já tentei de tudo e não consegui resolver.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ContraladorZumbi : MonoBehaviour, IMatavel
{
public GameObject Jogador;
private AnimacaoPersonagem animatorZumbi;
public AudioClip SomMorte;
private ControladorMovimentacao movimentacao;
private Status status;
private Vector3 direcao;
private Vector3 posicaoAleatoria;
private int dano = 10;
private float contadorVagar;
private float tempoEspera = 4;
// Start is called before the first frame update
void Start()
{
Jogador = GameObject.FindWithTag("Heroi");
animatorZumbi = GetComponent<AnimacaoPersonagem>();
movimentacao = GetComponent<ControladorMovimentacao>();
Vector3 posicaoLocal = transform.localPosition;
AleatorizarZumbi();
status = GetComponent<Status>();
}
void FixedUpdate()
{
float distancia = Vector3.Distance(transform.position, Jogador.transform.position);
direcao.y = 0;
if(direcao != Vector3.zero) {
movimentacao.Rotacionar(direcao);
}
if (distancia > 15 )
{
Vagar();
}
else if (distancia > 2.5)
{
direcao = Jogador.transform.position - transform.position;
direcao.y = 0;
animatorZumbi.Atacar(false);
movimentacao.Movimentar(direcao, status.Velocidade);
} else {
direcao = Jogador.transform.position - transform.position;
direcao.y = 0;
animatorZumbi.Atacar(true);
}
}
void Vagar()
{
contadorVagar -= Time.deltaTime;
if(contadorVagar <= 0)
{
posicaoAleatoria = AleatorizarPosicao();
contadorVagar += tempoEspera;
}
bool ficouPerto = Vector3.Distance(posicaoAleatoria, transform.position) <= 0.05;
if(ficouPerto == false);
{
direcao = posicaoAleatoria - transform.position;
direcao.y = 0;
movimentacao.Movimentar(direcao, status.Velocidade);
}
}
Vector3 AleatorizarPosicao()
{
Vector3 posicao = Random.insideUnitSphere * 10;
posicao += transform.position;
posicao.y = 0;
return posicao;
}
void AtacaJogador()
{
Jogador.GetComponent<ControlarJogador>().TomarDano(dano);
}
public void TomarDano (int dano)
{
status.Vida -= dano;
if (status.Vida <= 0)
{
Morrer();
}
}
public void Morrer()
{
Destroy(gameObject);
ControladorAudio.Instacia.PlayOneShot(SomMorte);
}
void AleatorizarZumbi ()
{
transform.GetChild(1).gameObject.SetActive(false);
int geraTipoZumbi = Random.Range(1,28);
dano = Random.Range(10,31);
transform.GetChild(geraTipoZumbi).gameObject.SetActive(true);
}
}