Score et vies
Leçon 9 sur 16 du cours Jeu Unity : casse-briques de Coddy.
Le score et les vies doivent apparaître à l’écran. La scène possède maintenant un Canvas avec deux textes TextMeshPro en haut, ScoreText et LivesText, et le GameManager les contient dans des champs TMP_Text de l’espace de noms TMPro.
Les nombres sont stockés dans les champs du GameManager et les textes ne font que les afficher. Une méthode réécrit les deux textes à partir des champs, et chaque méthode qui modifie un nombre l’appelle, tout comme Start(), afin que la première image affiche les vraies valeurs. Le compteur de pièces d’une boutique :
public TMP_Text coinsText;
int coins;
public void AddCoins(int amount)
{
coins += amount;
ShowCoins();
}
void ShowCoins()
{
coinsText.text = "Coins: " + coins;
}Le texte ne change que lorsque le nombre change. Le réécrire à chaque Update() donnerait le même résultat, mais créerait une nouvelle chaîne à chaque image pour rien.
Défi
Moyen- Ajoute
using TMPro;àGameManager, ainsi quepublic TMP_Text scoreTextetpublic TMP_Text livesText. Dans la scène, associe ScoreText et LivesText. - Écris
void ShowHud():scoreTextafficheScore: 0etlivesTextafficheLives: 3, avec les nombres actuels. - Appelle
ShowHud()à la fin deStart(), et après chaque changement du score ou du nombre de vies.
Appuie sur Play, détruis une brique, perds une balle, 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 };
public int lives = 3;
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;
}
public void BallLost(Ball lost)
{
lives--;
lost.ResetToPaddle();
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.