Menu
CoddyTech

Punktestand und Leben

Lektion 9 von 16 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.

challenge icon

Aufgabe

Mittel
  1. Füge using TMPro; zu GameManager sowie public TMP_Text scoreText und public TMP_Text livesText hinzu. Verknüpfe in der Szene ScoreText und LivesText.
  2. Schreibe void ShowHud(): scoreText zeigt Score: 0 und livesText zeigt Lives: 3, jeweils mit den aktuellen Zahlen.
  3. Rufe ShowHud() am Ende von Start() sowie nach einer Änderung der Punktzahl oder der Leben auf.

Drücke Play, zerstöre einen Block, verliere einen Ball und klicke dann auf Check.

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();
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Unity-Spiel: Brick Breaker