Menu
CoddyTech

Fin de partie

Leçon 13 sur 19 du cours Jeu Unity : casse-briques de Coddy.

La dernière vie perdue met fin à la partie. La balle sort du jeu, un panneau Game Over recouvre l’écran, et son bouton Play Again démarre une nouvelle partie. La scène contient maintenant le panneau, masqué, dans le canevas du HUD, et la liste On Click du bouton dans l’Inspector appelle déjà GameManager.PlayAgain. La liste On Click ne propose que des méthodes public, donc la méthode que tu choisis pour un bouton doit être publique.

Le moyen le plus simple de démarrer une nouvelle partie est de recharger la scène. Chaque objet est recréé à partir de la scène : un nouveau GameManager avec un score de 0 et 3 vies, un nouveau mur, la balle replacée sur la raquette. La scène en cours de jeu est SceneManager.GetActiveScene(), et son buildIndex est son numéro dans la compilation :

SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);

Masquer la balle avec SetActive(false) arrête son Update(), donc la barre d’espace ne peut plus la lancer, et la retire de la simulation physique. Le test vient après lives--, donc la partie se termine lorsque lives atteint 0 : à la troisième balle perdue, si lives commence à 3.

challenge icon

Défi

Moyen

Perdre la dernière vie met fin à la partie, et « Jouer à nouveau » permet de recommencer.

  1. Dans GameManager, ajoute using UnityEngine.SceneManagement; et public GameObject gameOverPanel;
  2. Dans BallLost, lorsque lives == 0, affiche le panneau et masque la balle avec lost.gameObject.SetActive(false) ; sinon, réinitialise-la comme avant.
  3. Écris public void PlayAgain() : SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);

Clique sur Jouer, perds trois balles et clique sur Jouer à nouveau : une nouvelle partie commence. Ensuite, clique sur Vérifier.

Essayez vous-même

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Brick brickPrefab;
    public Transform wall;
    public string[] levels;
    public float spacingX = 1.75f;
    public float spacingY = 0.75f;
    public float topY = 6f;

    public Ball ball;
    public int lives = 3;
    public TMP_Text scoreText;
    public TMP_Text livesText;

    int score;
    int level;
    int bricksLeft;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        BuildLevel(0);
        ShowHud();
    }

    void BuildLevel(int index)
    {
        level = index;
        string[] rows = levels[index].Split('/');
        for (int row = 0; row < rows.Length; row++)
        {
            string line = rows[row];
            float left = -(line.Length - 1) * spacingX / 2f;
            for (int col = 0; col < line.Length; col++)
            {
                char c = line[col];
                if (c == '.') continue;
                Vector3 pos = new Vector3(left + col * spacingX, topY - row * spacingY, 0f);
                Brick brick = Instantiate(brickPrefab, pos, Quaternion.identity, wall);
                brick.SetHits(c - '0');
                bricksLeft++;
            }
        }
    }

    public void BrickBroken(Brick brick)
    {
        score += brick.points;
        bricksLeft--;
        ShowHud();
        if (bricksLeft == 0)
        {
            ball.ResetToPaddle();
            BuildLevel((level + 1) % levels.Length);
        }
    }

    public void BallLost(Ball lost)
    {
        lives--;
        ShowHud();
        lost.ResetToPaddle();
    }

    void ShowHud()
    {
        scoreText.text = "Score: " + score;
        livesText.text = "Lives: " + lives;
    }
}
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 : casse-briques

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