Quando eu clico para reiniciar o game over continua aparecendo na tela e o jogo rodando atraz. o botão do fundo game over está assim: e o código de reiniciar assim:
alguém pode me ajudar.
Quando eu clico para reiniciar o game over continua aparecendo na tela e o jogo rodando atraz. o botão do fundo game over está assim: e o código de reiniciar assim:
alguém pode me ajudar.
Olá Yohana!
Peço que faça um teste, pois o problema pode estar na ordem em que você está definindo o Time.timeScale. No método ReiniciarJogo(), você está definindo o Time.timeScale como 1 após esconder a imagem do Game Over. Isso faz com que o jogo continue rodando antes de reiniciar.
Uma solução seria inverter a ordem dessas linhas de código. Primeiro, defina o Time.timeScale como 1 e depois esconda a imagem do Game Over. Dessa forma, o jogo só voltará a rodar após a imagem ser ocultada.
Aqui está o código corrigido:
public void ReiniciarJogo()
{
Time.timeScale = 1;
this.imagemGameOver.SetActive(false);
this.aviao.Reiniciar();
this.DestruirObstaculos();
this.pontuacao.Reiniciar();
}
Tente fazer essa alteração e veja se resolve o problema do Game Over não desaparecer corretamente, e se persistir, por favor compartilhe seu código comigo, ficarei feliz em ajudar.
Espero ter ajudado e reforço que em casos de dúvidas, conte sempre com o fórum da comunidade Alura! Bons estudos!
Sucesso ✨
Um grande abraço e até mais!
Oi Victor O erro persiste o código completo do diretor está assim agora:
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Diretor : MonoBehaviour { [SerializeField] private GameObject imagemGameOver; private Aviao aviao; private Pontuacao pontuacao;
private void Start()
{
this.aviao = GameObject.FindObjectOfType<Aviao>();
this.pontuacao = GameObject.FindObjectOfType<Pontuacao>();
}
public void FinalizarJogo()
{
Time.timeScale = 0;
this.imagemGameOver.SetActive(true);
}
public void ReiniciarJogo()
{
Time.timeScale = 1;
this.imagemGameOver.SetActive(false);
this.aviao.Reiniciar();
this.DestruirObstaculos();
this.pontuacao.Reiniciar();
}
private void DestruirObstaculos()
{
Obstaculo[] obstaculos = GameObject.FindObjectsOfType<Obstaculo>();
foreach(Obstaculo obstaculo in obstaculos)
{
obstaculo.Destruir();
}
}
}