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

[Dúvida] Funcionalidade Zumbis Mortos

Tentei implementar uma funcionalidade Zumbis Mortos em meu projeto, onde na tela de Game Over obtia a quantia de zumbis que você matou, então criei um método void no ControlaJogador juntamente de uma variavel, que era somado +1 cada vez que esse metodo era chamado. Ele apenas é chamado quando o zumbi executa o método morrer(), ou seja, sempre que o zumbi morre, soma mais um em minhas kills, o que faz sentido, depois pego essa variavel no controlaInterface para exibir na tela de GameOver. Porém, cada vez que eu mato um Zumbi, por algum motivo, a váriavel soma 7, então acaba ficando um resultado absurdo. Eu até exibi corretamente o numero de zumbis que matei pois apenas dividi o resultado final por 7 mas fiquei curioso o porque deste número ser 7.

ControlaInterface:

public class ControlaInterface : MonoBehaviour
{
    private ControlaJogador scriptControlaJogador;
    void Start()
    {
        scriptControlaJogador = GameObject.FindWithTag("Jogador").GetComponent<ControlaJogador>();
    
    }
    public void GameOver()
    {
        Kills.text = "Zumbis Mortos:\r\n" + scriptControlaJogador.ZumbisMortos/7;
    }

ControlaJogador

    public int ZumbisMortos;
    public void Matou()
    {
        ZumbisMortos+=1;
    }

ControlaInimigo

    private ControlaJogador scriptControlaJogador;
    void Start()
    {
         scriptControlaJogador = Jogador.GetComponent<ControlaJogador>();
    }   
      public void Morrer()
    {
        scriptControlaJogador.Matou();
        Destroy(gameObject);
        ControlaAudio.instancia.PlayOneShot(MorteZumbi);
    }
4 respostas

Oi, Gabriel, como acontece a chamada do método Morrer? Provavelmente ela tá rodando mais de uma vez, você pode debugar isso tentando colocar um Debug.Log("Chamada Morrer()") no método Morrer() e ver quantas vezes ele acontece no console.

Realmente com o debug foi possível ver que está sendo executada mais de uma vez quando mato um zumbi, pois assim que matei um, ele deu no console que foi executada a mesma mensagem 7 vezes. Porém continuo sem entender por que está sendo executada esse tanto de vezes. Confira o código:

 public void TomarDano(int dano)
    {
        statusInimigo.Vida -= dano;
        if (statusInimigo.Vida <= 0)
        {
            Morrer();
        }
    }
 public void Morrer()
    {
        
        Destroy(gameObject);
        ControlaAudio.instancia.PlayOneShot(MorteZumbi);
        scriptControlaJogador.Matou();
        Debug.Log("Chamada Morrer()");
    }

Esses dois métodos estão contidos na interface que criamos no curso "IMatavel"

solução!

Descobri o que aconteceu, na verdade, o prefab do zumbi estava com 7 colliders, e isso estava fazendo o código ser executado 7 vezes. Desculpe o incomodo!

Que bom que conseguiu debugar! Essa talvez seja a parte mais importante no aprendizado, mostra que você internalizou todo o conteúdo :)

Bons estudos!