Menu
CoddyTech

Rejouer

Leçon 12 sur 14 du cours Jeu Unity : Snake 3D de Coddy.

Lorsque le serpent meurt, un panneau Game Over apparaît avec un bouton Play Again. Le panneau se trouve dans le HUD et est masqué au départ ; SetActive(true) l’affiche. Le serpent sait quand il meurt, et GameManager gère les écrans, donc Die() appelle une méthode publique GameOver() sur GameManager.

Play Again recommence en chargeant à nouveau la scène. Chaque objet revient dans l’état défini par la scène : le serpent sur sa première case avec deux segments, le score à 0, le panneau masqué. Le bouton Retry d’un jeu de course fonctionne de la même manière :

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

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

Le chargement par nom associe le bouton à une seule scène. SceneManager.GetActiveScene().buildIndex correspond à la scène en cours d’exécution ; la charger redémarre donc la scène dans laquelle se trouve le bouton. La nouvelle scène contient un nouveau GameManager, dont Awake() définit à nouveau Instance ; le nouveau serpent communique donc avec le nouveau GameManager.

challenge icon

Défi

Moyen

Le HUD comporte un GameOverPanel masqué avec un PlayAgainButton, et la scène définit les deux dans GameManager.

  1. Dans GameManager, ajoute using UnityEngine.UI;, using UnityEngine.SceneManagement;, public GameObject gameOverPanel; et public Button playAgainButton;.
  2. Écris public void GameOver(), qui affiche le panneau.
  3. Écris void PlayAgain(), qui recharge la scène active, puis dans Start(), fais en sorte que le bouton l’appelle.
  4. Dans Die() de Snake, appelle GameOver().

Appuie sur Play, percute un obstacle, rejoue, puis appuie sur Check.

Essayez vous-même

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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Jeu Unity : Snake 3D