Menu
CoddyTech

Fin de partie

Leçon 12 sur 16 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
  1. Ajoute using UnityEngine.SceneManagement; et public GameObject gameOverPanel à GameManager. La scène référence le GameOverPanel masqué.
  2. Dans BallLost, lorsque la dernière vie est perdue, affiche le panneau et masque la balle perdue avec SetActive(false), au lieu de la remettre sur la raquette.
  3. Écris public void PlayAgain(), qui recharge la scène en cours. Le bouton Play Again du panneau l’appelle déjà.

Appuie sur Play, perds les trois balles, clique sur Play Again, puis sur Check.

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