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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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?
É 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.