Olá Professor, conforme acompanhado na aula, estava criando uma tela de menu personalizada no proprio "menu" criei novas ações para o "Jogador" e salvei, não apliquei para todos para nao impactar no "Jogador" do "game", porém quando fui fazer o mesmo o Zumbi, nao sei se houve alguma falta de atenção minha, mas removi TAMBEM todos os animator's do zumbi do "game" após isso resolvi usar o prefab de Zumbi disponibilizado nas aulas, mas perdi todas as referencias... ja referenciei tudo que eu lembrava, mas estou tomando alguns erros que nao sei o que faço, fora alguns bugs.... poderia me ajudar?
os erros são:
Zumbi:
Gerador:
Código ControlaInimigo: Removi as variaveis pois não estava cabendo tudo nesse post
public class ControlaInimigo : MonoBehaviour, IMatavel
{
// Start is called before the first frame update
void Start()
{
Jogador = GameObject.FindWithTag("Jogador");
animacaoInimigo = GetComponent<AnimacaoPersonagem>();
movimentaInimigo = GetComponent<MovimentoPersonagem>();
AleatorizarZumbi();
statusInimigo = GetComponent<Status>();
scriptControlaInterface = GameObject.FindObjectOfType(typeof(ControlaInterface)) as ControlaInterface;
}
void FixedUpdate()
{
float distancia = Vector3.Distance(transform.position, Jogador.transform.position);
movimentaInimigo.Rotacionar(direcao);
animacaoInimigo.Movimentar(direcao.magnitude);
if (distancia > 15)
{
Vagar();
}
else if (distancia > 2.5)
{
Perseguir();
}
else
{
direcao = Jogador.transform.position - transform.position;
animacaoInimigo.Atacar(true);
}
}
void Perseguir()
{
direcao = Jogador.transform.position - transform.position;
movimentaInimigo.Movimentar(direcao, statusInimigo.Velocidade);
animacaoInimigo.Atacar(false);
}
void Vagar()
{
contadorVagar -= Time.deltaTime;
if (contadorVagar <= 0)
{
posicaoAleatoria = AleatorizarPosicao();
contadorVagar += tempoEntrePosicoesAleatorias + Random.Range(-1f, 1f);
}
bool ficouPertoOSuficiente = Vector3.Distance(transform.position, posicaoAleatoria) <= 0.05;
if (!ficouPertoOSuficiente)
{
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;
}
private void AtacaJogador()
{
int dano = Random.Range(20, 30);
Jogador.GetComponent<ControlaJogador>().TomarDano(dano);
}
private void AleatorizarZumbi()
{
int geraTipoZumbi = Random.Range(1, transform.childCount);
transform.GetChild(geraTipoZumbi).gameObject.SetActive(true);
}
public void TomarDano(int dano)
{
statusInimigo.Vida -= dano;
if (statusInimigo.Vida <= 0)
{
Morrer();
}
}
public void Morrer()
{
animacaoInimigo.Morrer();
movimentaInimigo.Morrer(gameObject);
this.enabled = false;
ControlaAudio.instancia.PlayOneShot(SomDeMorte);
VerificarGeracaoKitMedico(porcentagemGerarKitMedico);
scriptControlaInterface.AtualizarQuantidadeDeZumbisMortos();
meuGerador.DiminuirQuantidadeDeZumbisVivos();
}
void VerificarGeracaoKitMedico(float porcentagemGeracao)
{
if (Random.value <= porcentagemGeracao)
{
Instantiate(KitMedicoPrefab, transform.position, Quaternion.identity);
}
}
}
e o bug basicamente quando mato algum zumbi ele sai deslizando morto (Não todos, mas alguns sim)... eu nao fiz eles entrarem de baixo da terra pois achei "melhor" fazer com que eles caissem mortos e simplesmente sumissem após alguns segundos, e desativei o RiggiBody pra eles nao tomarem dano enquanto mortos no chao