aqui o codigo do ControlaInimigo, se precisar de mais algum me avise: [using System.Collections; using System.Collections.Generic; using UnityEngine;
public class ControlaInimigo : MonoBehaviour, IMatavel {
public GameObject jogador;
private Rigidbody rigidbodyInimigo;
private MovimentoPersonagem movimentaInimigo;
private AnimacaoPersonagem animacaoInimigo;
private Status statusInimigo;
private Vector3 posicaoAleatoria;
private float posicaoAleatoriaTimer;
private float tempoEntrePosicaoAleatoria = 4;
private Vector3 direcao;
public AudioClip SomZumbiMorte;
// Start is called before the first frame update
void Start()
{
jogador = GameObject.FindWithTag("Jogador");
AleatorizarZumbi();
rigidbodyInimigo = GetComponent<Rigidbody>();
animacaoInimigo = GetComponent<AnimacaoPersonagem>();
movimentaInimigo = GetComponent<MovimentoPersonagem>();
statusInimigo = GetComponent<Status>();
}
void FixedUpdate()
{
float distancia = Vector3.Distance(transform.position, jogador.transform.position);
direcao = jogador.transform.position - transform.position;
animacaoInimigo.Movimentar(direcao.magnitude);
movimentaInimigo.Rotacionar(direcao);
if (distancia > 15)
{
Vagar();
}
else if (distancia > 2.5)
{
movimentaInimigo.Movimentar(direcao, statusInimigo.Velocidade);
animacaoInimigo.Atacar(false);
}
else
{
animacaoInimigo.Atacar(true);
}
}
void Vagar()
{
posicaoAleatoriaTimer -= Time.deltaTime;
if (posicaoAleatoriaTimer <= 0)
{
posicaoAleatoria = AleatorizarPosicao();
posicaoAleatoriaTimer += tempoEntrePosicaoAleatoria;
}
bool posicaoFinal = Vector3.Distance(transform.position, posicaoAleatoria) <= 0.05;
if (posicaoFinal == false)
{
direcao = posicaoAleatoria - transform.position;
movimentaInimigo.Movimentar(direcao, statusInimigo.Velocidade);
}
}
Vector3 AleatorizarPosicao ()
{
Vector3 posicao = Random.insideUnitSphere * 10;
posicao += transform.position;
posicao.y = transform.position.y;
return posicao;
}
void Ataca ()
{
int dano = Random.Range(20, 30);
jogador.GetComponent<ControlaJogador>().TomarDano(dano);
}
void AleatorizarZumbi ()
{
int gerarTipoZumbi = Random.Range(1, 28);
transform.GetChild(gerarTipoZumbi).gameObject.SetActive(true);
}
public void TomarDano(int dano)
{
statusInimigo.HP -= dano;
if(statusInimigo.HP <= 0)
{
Morrer();
}
}
public void Morrer()
{
Destroy(gameObject);
ControlaAudio.instancia.PlayOneShot(SomZumbiMorte);
}
}]()