Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Zumbi valendo por 2

Boa Tarde, como dito acima, tudo funciona perfeitamente, mas quando eu mato um zumbi, o jogo registra de dois em dois, como corrigir isso?

public void AtualizarQuantidadeDeZumbisMortos()
{
    quantidadeDeZumbisMortos++;
    TextoQuantidadeDeZumbisMortos.text = string.Format("x {0}", quantidadeDeZumbisMortos);

}
6 respostas

Oi, Virtor, tudo bem?

E como está o código que faz a chamada a este método?

Esse?

scriptControlaInterface.AtualizarQuantidadeDeZumbisMortos();

Sim, mas se possível o código todo desse arquivo :)

public class ControlaZumbi : MonoBehaviour, IMatavel
{
public GameObject Jogador;
private MovimentoPersonagem movimentaZumbi;
private AnimacaoPersonagem animacaoZumbi;
private Status statusZumbi;
public AudioClip SomDeMorte;
private Vector3 posicaoAleatoria;
private Vector3 direcao;
private float contadorVagar;
private float porcentagemGerarKitMedico = 0.1f;
public GameObject KitMedicoPrefab;
private ControlaInterface scriptControlaInterface;
[HideInInspector]
public GeradorZumbis meuGerador;

public float andar = 10;
// Start is called before the first frame update
void Start()
{
    Jogador = GameObject.FindWithTag("Jogador");        
    animacaoZumbi = GetComponent<AnimacaoPersonagem>();
    movimentaZumbi = GetComponent<MovimentoPersonagem>();
    AleatorizarZumbi();
    statusZumbi = GetComponent<Status>();
    scriptControlaInterface = GameObject.FindObjectOfType(typeof(ControlaInterface)) as ControlaInterface;
}

void FixedUpdate () 
{
    float distancia = Vector3.Distance(transform.position, Jogador.transform.position);

    
    movimentaZumbi.Rotacionar(direcao);
    animacaoZumbi.Movimentar(direcao.magnitude);


    if(distancia > 15)
    {
        Vagar();
    }
   else if(distancia > 2.5) 
    {       
        Perseguir();       
    }
    else
    {
        direcao = Jogador.transform.position - transform.position;
        animacaoZumbi.Atacar(true);
    }     
    void Vagar()
    {
        contadorVagar -= Time.deltaTime;
        if(contadorVagar <=0)
        {
            posicaoAleatoria = AleatorizarPosicao();
            contadorVagar += statusZumbi.tempoEntrePosicoesAleatroias + Random.Range(-1f, 1f);

        }
        
        bool ficouPertoOSuficiemte = Vector3.Distance(transform.position, posicaoAleatoria) <= 0.05;
        if(ficouPertoOSuficiemte == false)
        {
        direcao = posicaoAleatoria - transform.position;
        movimentaZumbi.Movimentar(direcao, statusZumbi.Velocidade);

        }            
    }

    void Perseguir()
    {
     direcao = Jogador.transform.position - transform.position;

   movimentaZumbi.Movimentar(direcao, statusZumbi.Velocidade);
    animacaoZumbi.Atacar(false);            
    }

    Vector3 AleatorizarPosicao()
    {
        Vector3 posicao = Random.insideUnitSphere * andar;
        posicao += transform.position;
        posicao.y = transform.position.y;

        return posicao;
    }
}
void AtacaJogador()
{
    int dano = Random.Range(20, 30);
    Jogador.GetComponent<ControlaJogador>().TomarDano(dano);
    
}

void AleatorizarZumbi ()
{
    int geraTipoZumbi = Random.Range(1, 28);
    transform.GetChild(geraTipoZumbi).gameObject.SetActive(true);
}

public void TomarDano(int dano)
{
    statusZumbi.Vida -= dano;
    if(statusZumbi.Vida <=0) 
    {
        Morrer();
    }
}

public void Morrer()
{
     Destroy(gameObject);
    ControlaAudio.instancia.PlayOneShot(SomDeMorte);
    VerificarGeracaoKitMedico(porcentagemGerarKitMedico);
    scriptControlaInterface.AtualizarQuantidadeDeZumbisMortos();
    meuGerador.DiminuirQuantidadeDeZumbisVivos();
}

void VerificarGeracaoKitMedico(float porcentagemGeracao)
{
    if(Random.value <= porcentagemGeracao)
    {
        Instantiate(KitMedicoPrefab, transform.position, Quaternion.identity);
    }
}

}

Você consegue fazer um .zip do seu projeto e subir num google drive, wetransfer, etc?

Mas meu palpite seria que o método Morrer() está sendo chamado mais de uma vez, mas isso é só um palpite

solução!

Na verdade é que tinha colocado dois colisores nos zumbis, por isso eles valor era duplicado, como se eu matasse dois ao mesmo tempo.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software