Menu
CoddyTech

Perdre une balle

Leçon 8 sur 16 du cours Jeu Unity : casse-briques de Coddy.

Une balle qui passe derrière la raquette est perdue. Sous la raquette, la scène comporte maintenant une DeathZone : un objet avec un Box Collider configuré sur Is Trigger et le tag DeathZone. Un déclencheur n’arrête rien ; il envoie OnTriggerEnter(Collider other) lorsqu’un objet doté d’un Rigidbody y entre. La balle signale la perte au GameManager, qui gère les vies et décide de la suite.

Une bille qui tombe dans l’eau réapparaît à son point d’apparition :

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Water")) Respawn();
}

void Respawn()
{
    rb.linearVelocity = Vector3.zero;
    transform.position = spawnPoint.position;
}

La balle a besoin de moins que la bille. Son Update() la place déjà sur la raquette à chaque image tant que launched est faux ; il suffit donc, pour la réinitialiser, d’effacer ce marqueur et d’arrêter la balle : à l’image suivante, elle revient sur la raquette, et la barre d’espace la relance.

challenge icon

Défi

Moyen
  1. Dans Ball, écris public void ResetToPaddle() : la balle n’est plus lancée et cesse de bouger.
  2. Ajoute OnTriggerEnter à Ball : lorsqu’elle entre dans l’objet portant l’étiquette DeathZone, appelle GameManager.Instance.BallLost(this).
  3. Dans GameManager, ajoute public int lives = 3 et public void BallLost(Ball lost) : une vie en moins, et la balle perdue retourne sur la raquette.

Il n’y a pas encore de fin de partie, donc le nombre de vies peut descendre sous 0 pour le moment.

Appuie sur Play, rate volontairement la balle, relance-la, puis clique sur Check.

Essayez vous-même

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Brick brickPrefab;
    public Transform wall;
    public int rows = 5;
    public int columns = 9;
    public float spacingX = 1.75f;
    public float spacingY = 0.75f;
    public float topY = 6f;
    public int[] rowHits = { 2, 1, 1, 1, 1 };

    int score;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        BuildWall();
    }

    void BuildWall()
    {
        float left = -(columns - 1) * spacingX / 2f;
        for (int row = 0; row < rows; row++)
        {
            for (int col = 0; col < columns; col++)
            {
                Vector3 pos = new Vector3(left + col * spacingX, topY - row * spacingY, 0f);
                Brick brick = Instantiate(brickPrefab, pos, Quaternion.identity, wall);
                brick.SetHits(rowHits[row]);
            }
        }
    }

    public void BrickBroken(Brick brick)
    {
        score += brick.points;
    }
}
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