Menu
CoddyTech

Jogue novamente

Lição 12 de 14 do curso Jogo 3D da Cobrinha na Unity da Coddy.

Quando a cobra morre, aparece um painel de Game Over com um botão Jogar novamente. O painel fica no HUD e começa oculto, e SetActive(true) o exibe. A cobra sabe quando morre, e o GameManager controla as telas, então Die() chama um GameOver() público no GameManager.

Jogar novamente recomeça carregando a cena outra vez. Todos os objetos voltam como estavam na cena: a cobra em sua primeira célula com dois segmentos, a pontuação em 0, o painel oculto. O botão Tentar novamente de um jogo de corrida é conectado da mesma forma:

void Start()
{
    retryButton.onClick.AddListener(Retry);
}

void Retry()
{
    SceneManager.LoadScene("Track1");
}

Carregar pelo nome vincula o botão a uma única cena. SceneManager.GetActiveScene().buildIndex é a cena que está em execução, então carregá-la reinicia qualquer que seja a cena em que o botão está. A nova cena tem um novo GameManager, cujo Awake() define Instance novamente, então a nova cobra se comunica com o novo GameManager.

challenge icon

Desafio

Médio

Morrer exibe um painel de fim de jogo, e “Jogar Novamente” inicia uma nova partida.

  1. Em GameManager, adicione using UnityEngine.UI;, using UnityEngine.SceneManagement;, public GameObject gameOverPanel; e public Button playAgainButton;
  2. public void GameOver() exibe o painel; void PlayAgain() carrega a cena ativa novamente, e Start() adiciona um ouvinte a playAgainButton.onClick.
  3. O método Die() de Snake chama GameManager.Instance.GameOver().

Pressione “Jogar”, bata e clique em “Jogar Novamente”: uma nova partida começa. Depois, “Verificar”.

Experimente você mesmo

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

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Snake snake;
    public GameObject foodPrefab;
    public TMP_Text scoreText;
    private Transform food;
    private int score;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        scoreText.text = "Score: 0";
        food = Instantiate(foodPrefab).transform;
        MoveFood();
    }

    public bool IsFood(Vector3 cell)
    {
        return cell == food.position;
    }

    public void Eat()
    {
        score++;
        scoreText.text = "Score: " + score;
        MoveFood();
    }

    void MoveFood()
    {
        List<Vector3> free = new List<Vector3>();
        for (int x = -snake.edge; x <= snake.edge; x++)
        {
            for (int z = -snake.edge; z <= snake.edge; z++)
            {
                Vector3 cell = new Vector3(x, 0f, z);
                if (!snake.Occupies(cell))
                {
                    free.Add(cell);
                }
            }
        }
        food.position = free[Random.Range(0, free.Count)];
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Jogo 3D da Cobrinha na Unity

Pratique por conta própria: Playground de Unity