6
respostas

simplificar o codigo

eu apenas tenho uma pergunta : nao seria mais facil ao inves de criar o esta vivo definir que se a vida for = a 0 o game over aparece e so perder vida se avida for maoir que zero?

6 respostas

É uma solução possível. Mas não se preocupe muito em mais fácil ou mais difícil o professor só quer ensinar. Quando fazer seu projeto de jogo você poderá fazer ele da forma que achar mais confortável.

é por causa que essa confusao travou todo o meu jogo agr n da mais para fazer nada

o game over nunca desaparece

posta seu código aqui para gente dar uma analisada

using System.Collections; using System.Collections.Generic; using UnityEngine;

public class Jogo : MonoBehaviour {

[SerializeField] private GameObject torrePrefab; [SerializeField]private GameObject gameOver; [SerializeField]private Jogador jogador;

void Start()
{
    gameOver.SetActive(false);
}


void Update ()
{
    if (JogoAcabou())
    {
        gameOver.SetActive(true);
    }else {
        if (ClicouComBotaoPrimario())
        {
            ConstroiTorre();
        }
    }
}
private bool JogoAcabou()
{
    return jogador.EstaVivo();
}

private bool ClicouComBotaoPrimario()
{
    return Input.GetMouseButtonDown(0);
}


public void RecomecaJogo()
{
    Application.LoadLevel(Application.loadedLevel);
}
private void ConstroiTorre ()
{
    Vector3 posicaoDoClique = Input.mousePosition;
    RaycastHit elementoAtingidoPeloRaio = DisparaRaioDaCameraAteUmPonto(posicaoDoClique);

    if (elementoAtingidoPeloRaio.collider != null)
    {
        Vector3 posicaoDeCriacaoDaTorre = elementoAtingidoPeloRaio.point;
        Instantiate(torrePrefab, posicaoDeCriacaoDaTorre, Quaternion.identity);
    }

}
private RaycastHit DisparaRaioDaCameraAteUmPonto (Vector3 pontoInicial)
{
    Ray raio = Camera.main.ScreenPointToRay(pontoInicial);
    RaycastHit elementoAtingidoPeloRaio;
    float comprimentoMaximoDoRaio = 100.0f;
    Physics.Raycast(raio, out elementoAtingidoPeloRaio, comprimentoMaximoDoRaio);

    return elementoAtingidoPeloRaio;

}

}

Repare que aqui

private bool JogoAcabou()
{
    return jogador.EstaVivo();
}

Se o jogador está vivo o jogo acaba.

Então vamos inverter a ordem desse if, pois dessa forma quando você verificava se o jogo acabou dava game over porque retornava true pois o jogador estava vivo.

 if (JogoAcabou())
    {
        gameOver.SetActive(true);
    }else {
        if (ClicouComBotaoPrimario())
        {
            ConstroiTorre();
        }
    }

para

 if (JogoAcabou())
    {
          if (ClicouComBotaoPrimario())
        {
            ConstroiTorre();
        }
    }else {
      gameOver.SetActive(true);

    }

Faz as alterações e veja se funciona.