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?
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.