3
respostas

Metodo gameover separado

Eu tentei fazer o game over em um método diferente, me parece melhor deixar ele separado para o caso de eu querer fazer um jogo em que o game over vem de outras condições além de tomar dano. porém se eu rodo ele fora do metodo TomarDano() o game over não acontece. sabe me dizer o por quê?

insira seu código aqui

(...)

public void TomarDano()
{
    Vida -= 30;
}

void GameOver()
{
    if (Vida <= 0)
    {
        Time.timeScale = 0;
        TextoGameOver.SetActive(true);
        Vivo = false;
    }

}

}

3 respostas

Oi, José, tudo bom?

O método tem que ser executado em algum momento então você pode ou chamar ele no Update ou algum outro jeito da Unity/C# como Events.

Então pra ele executar teria que ser algo como:

public void TomarDano()
{
    Vida -= 30;
    GameOver();
}

void GameOver()
{
    if (Vida <= 0)
    {
        Time.timeScale = 0;
        TextoGameOver.SetActive(true);
        Vivo = false;
    }

}

ou

void Update()
{
    if(Vivo == true && Vida <= 0)
    {
          GameOver();
     }
}

Ou outras alternativas, o bom de usar no TomarDano é que você evita a execução a cada frame.

Não sei se era isso que você queria evitar na verdade e está buscando outro jeito, isso resolve?

Entendi agora, era porque ele não estava sendo ""chamado""?. No caso para não jogar no update e ele ser executado a cada frame, e portanto consumir recursos, eu poderia criar o método separado e jogar no TomarDano. Caso eu queira que o personagem morra de outra forma, como por exemplo cair num buraco ou pisar em espinhos eu criaria o método PisarEspinhos e jogaria o GameOver() lá dentro?

Isso! Essa que é a maravilha de usar métodos você pode reutilizar o comportamento.

Outra opção também seria dar um dano muito alto de uma vez, que também iria chamar o game over.