Punkte und Leben
Lektion 9 von 19 im Kurs Unity-Spiel: Brick Breaker von Coddy.
Punktzahl und Leben gehören auf den Bildschirm. Die Szene hat jetzt ein Canvas mit zwei TextMeshPro-Texten oben, ScoreText und LivesText, und der GameManager speichert sie in TMP_Text-Feldern aus dem Namespace TMPro.
Die Zahlen befinden sich in den Feldern des GameManagers, und die Texte zeigen sie nur an. Eine Methode schreibt beide Texte anhand der Felder neu, und jede Methode, die eine Zahl ändert, ruft sie auf. Das gilt auch für Start(), damit im ersten Frame die tatsächlichen Werte angezeigt werden. Ein Münzzähler für einen Shop:
public TMP_Text coinsText;
int coins;
public void AddCoins(int amount)
{
coins += amount;
ShowCoins();
}
void ShowCoins()
{
coinsText.text = "Coins: " + coins;
}Der Text ändert sich nur, wenn sich die Zahl ändert. Ihn in jedem Update() neu zu schreiben, würde genauso aussehen, aber für nichts in jedem Frame einen neuen String erstellen.
Aufgabe
MittelZeige die Punktzahl und die Leben auf dem Bildschirm an.
- Füge in
GameManagerusing TMPro;,public TMP_Text scoreText;undpublic TMP_Text livesText;hinzu. - Schreibe
void ShowHud():scoreText.text = "Score: " + score;undlivesText.text = "Lives: " + lives; - Rufe
ShowHud()am Ende von Start, in BrickBroken und in BallLost auf.
Drücke „Spielen“: Score: 0 und Lives: 3 werden angezeigt und ändern sich beim Spielen. Klicke dann auf „Prüfen“.
Probier es selbst
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();
}
}
Alle Lektionen in Unity-Spiel: Brick Breaker
Übe selbstständig: Unity-Playground