Menu
CoddyTech

Skor dan Nyawa

Pelajaran 9 dari 16 dalam kursus Game Unity: Brick Breaker di Coddy.

Skor dan nyawa seharusnya tampil di layar. Scene kini memiliki Canvas dengan dua teks TextMeshPro di bagian atas, ScoreText dan LivesText, dan GameManager menyimpannya dalam field TMP_Text dari namespace TMPro.

Angka disimpan dalam field GameManager dan teks hanya menampilkannya. Satu method menulis ulang kedua teks dari field, dan setiap method yang mengubah angka memanggilnya, begitu juga Start(), sehingga frame pertama menampilkan nilai yang sebenarnya. Penghitung koin di toko:

public TMP_Text coinsText;
int coins;

public void AddCoins(int amount)
{
    coins += amount;
    ShowCoins();
}

void ShowCoins()
{
    coinsText.text = "Coins: " + coins;
}

Teks hanya berubah saat angkanya berubah. Menulis ulang teks itu di setiap Update() akan terlihat sama, tetapi membuat string baru setiap frame tanpa alasan.

challenge icon

Tantangan

Sedang
  1. Tambahkan using TMPro; ke GameManager, serta public TMP_Text scoreText dan public TMP_Text livesText. Hubungkan ScoreText dan LivesText di scene.
  2. Tulis void ShowHud(): scoreText menampilkan Score: 0 dan livesText menampilkan Lives: 3, dengan angka saat ini.
  3. Panggil ShowHud() di akhir Start(), dan setelah skor atau jumlah nyawa berubah.

Tekan Play, hancurkan brick, biarkan bola hilang, lalu tekan Check.

Coba sendiri

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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Game Unity: Brick Breaker