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

La mort affiche un panneau de fin de partie, et « Rejouer » lance une nouvelle partie.

  1. Dans GameManager, ajoute using UnityEngine.UI;, using UnityEngine.SceneManagement;, public GameObject gameOverPanel; et public Button playAgainButton;
  2. public void GameOver() affiche le panneau ; void PlayAgain() recharge la scène active, et Start() l’ajoute à playAgainButton.onClick.
  3. Die() de Snake appelle GameManager.Instance.GameOver().

Appuie sur « Jouer », percute un obstacle et clique sur Rejouer : une nouvelle partie commence. Puis clique sur « Vérifier ».

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

Entraînez-vous par vous-même : Playground Unity