Menu
CoddyTech

Perdre une balle

Leçon 8 sur 19 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

Rater la balle coûte une vie et la replace sur la raquette.

  1. Dans Ball, écris public void ResetToPaddle() : launched = false; et la vitesse Vector3.zero.
  2. Dans le OnTriggerEnter de Ball, entrer dans l’objet étiqueté DeathZone appelle GameManager.Instance.BallLost(this).
  3. Dans GameManager, ajoute public int lives = 3; et public void BallLost(Ball lost) : une vie en moins, puis lost.ResetToPaddle();

Appuie sur « Jouer » et rate la balle : elle attend de nouveau sur la raquette. Puis clique sur « Vérifier ».

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

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