Não sei bem como descrever, mas meus zumbis asgumas vezes começam a me atacar e ao invés de causarem dano, eles apenas atacam mais rápido (fazem a animação de atacar) mais rápido e sem causar dano. Isso começou quando mexemos na parte de ataque da última vez, mas como vi que nesse exercício falaríamos sobre bug do zumbi, achei que se tratasse desse.
O código está assim:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ControladorZumbi : MonoBehaviour, IMatavel
{
public GameObject jogador;
private MovimentacaoPersonagem movimentoZumbi;
private AnimacaoPersonagem animacaoZumbi;
private Status statusZumbi;
public AudioClip somMorteZumbi;
private Vector3 posicaoAleatoria;
private Vector3 direcao;
private float contadorRoaming;
private float tempoEntrePosicoesAleatorias = 4;
// Start is called before the first frame update
void Start()
{
jogador = GameObject.FindWithTag("Player");
animacaoZumbi = GetComponent<AnimacaoPersonagem>();
movimentoZumbi = GetComponent<MovimentacaoPersonagem>();
AleatorizarZumbi();
statusZumbi = GetComponent<Status>();
}
void FixedUpdate()
{
float distancia = Vector3.Distance(transform.position, jogador.transform.position);
movimentoZumbi.Rotacionar(direcao);
animacaoZumbi.Movimentar(direcao.magnitude);
if (distancia > 15)
{
Roaming();
}
else if (distancia > 2.5)
{
direcao = jogador.transform.position - transform.position;
movimentoZumbi.Movimentar(direcao, statusZumbi.velocidade);
animacaoZumbi.Atacar(false);
}
else
{
direcao = jogador.transform.position - transform.position;
animacaoZumbi.Atacar(true);
}
}
void Roaming()
{
contadorRoaming -= Time.deltaTime;
if(contadorRoaming <=0)
{
posicaoAleatoria = aleatorizarPosicao();
contadorRoaming += tempoEntrePosicoesAleatorias;
}
bool pertoSuficiente = Vector3.Distance(transform.position, posicaoAleatoria) <= 0.05;
if(pertoSuficiente == false)
{
direcao = posicaoAleatoria - transform.position;
movimentoZumbi.Movimentar(direcao, statusZumbi.velocidade);
}
}
Vector3 aleatorizarPosicao()
{
Vector3 posicao = Random.insideUnitSphere * 10;
posicao += transform.position;
posicao.y = transform.position.y;
return posicao;
}
void atacaJogador()
{
int danoZumbi = Random.Range(20, 30);
jogador.GetComponent<ControladorJogador>().TomarDano(danoZumbi);
}
void AleatorizarZumbi ()
{
int geradorTiposZumbi = Random.Range(1,28);
transform.GetChild(geradorTiposZumbi).gameObject.SetActive(true);
}
public void TomarDano(int dano)
{
statusZumbi.Vida -= dano;
if(statusZumbi.Vida <= 0)
{
Morrer();
}
}
public void Morrer()
{
Destroy(gameObject);
ControlaAudio.instancia.PlayOneShot(somMorteZumbi);
}
}
E um link para download do projeto caso precisem abrir o projeto para conseguir simular o erro é esse daqui: https://drive.google.com/file/d/1_-vmGCi4r6RRUubxM7h-K_v-2cugIxea/view?usp=share_link
Obrigada!!!