Olá! Está acontecendo algo com meus zumbis (e consequentemente com o boss também). Quando eu mato o zumbi com um tiro só ele cai, entra no chão e é destruído, normal. Porém, caso eu dê mais de um tiro nele, o segundo tiro parece interromper a animação de morte e assim, caso eu continue atirando, posso segurar o zumbi "de pé" até ele ser destruído...
Seguem os códigos do ControladorZumbi:
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;
private float porcentagemGerarKitMedico = 0.15f;
public GameObject KitMedicoPrefab;
private ControlaInterface scriptControlaInterface;
[HideInInspector]
public GeradorZumbis meuGeradorZumbis;
void Start()
{
jogador = GameObject.FindWithTag("Player");
animacaoZumbi = GetComponent<AnimacaoPersonagem>();
movimentoZumbi = GetComponent<MovimentacaoPersonagem>();
AleatorizarZumbi();
statusZumbi = GetComponent<Status>();
scriptControlaInterface = GameObject.FindObjectOfType(typeof(ControlaInterface)) as ControlaInterface;
}
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 + Random.Range(-2f, 1f);
}
bool pertoSuficiente = Vector3.Distance(transform.position, posicaoAleatoria) <= 0.1;
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, transform.childCount);
transform.GetChild(geradorTiposZumbi).gameObject.SetActive(true);
}
public void TomarDano(int dano)
{
statusZumbi.Vida -= dano;
if(statusZumbi.Vida <= 0)
{
Morrer();
}
}
public void Morrer()
{
animacaoZumbi.Morrer();
this.enabled = false;
ControlaAudio.instancia.PlayOneShot(somMorteZumbi);
VerificarGeracaoKitMedico(porcentagemGerarKitMedico);
scriptControlaInterface.AtualizarQuantidadeDeZumbisMortos();
meuGeradorZumbis.DiminuirQuantidadeDeZumbisVivos();
Destroy(gameObject, 8);
Invoke("DerrubarCorpo", 5);
}
void DerrubarCorpo()
{
movimentoZumbi.Morrer();
}
void VerificarGeracaoKitMedico(float porcentagemGeracao)
{
if(Random.value <= porcentagemGeracao)
{
Instantiate(KitMedicoPrefab, transform.position, Quaternion.identity);
}
}
}