2
respostas

o game over não desaparece

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: Insira aqui a descrição dessa imagem para ajudar na acessibilidadee o código de reiniciar assim: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

alguém pode me ajudar.

2 respostas

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!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

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();
    }
}

}