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.
Défi
Moyen- Dans
Ball, écrispublic void ResetToPaddle(): la balle n’est plus lancée et cesse de bouger. - Ajoute
OnTriggerEnteràBall: lorsqu’elle entre dans l’objet portant l’étiquetteDeathZone, appelleGameManager.Instance.BallLost(this). - Dans
GameManager, ajoutepublic int lives = 3etpublic 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;
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.