Menu
CoddyTech

Điểm số và mạng

Bài học 9 trên 19 trong khóa học Trò chơi Unity: phá gạch của Coddy.

Điểm số và số mạng cần hiển thị trên màn hình. Giờ đây, cảnh có một Canvas với hai dòng chữ TextMeshPro ở phía trên, ScoreText và LivesText, còn GameManager giữ chúng trong các trường TMP_Text thuộc không gian tên TMPro.

Các con số nằm trong những trường của GameManager, còn các dòng chữ chỉ hiển thị chúng. Một phương thức cập nhật cả hai dòng chữ từ các trường, và mọi phương thức thay đổi một con số đều gọi phương thức đó, Start() cũng vậy, để khung hình đầu tiên hiển thị các giá trị thực. Bộ đếm xu trong cửa hàng:

public TMP_Text coinsText;
int coins;

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

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

Dòng chữ chỉ thay đổi khi con số thay đổi. Việc cập nhật nó trong mỗi lần gọi Update() trông vẫn như vậy, nhưng lại tạo một chuỗi mới ở mỗi khung hình mà không cần thiết.

challenge icon

Thử thách

Trung bình

Hiển thị điểm số và số mạng trên màn hình.

  1. Trong GameManager, thêm using TMPro;, public TMP_Text scoreText; và public TMP_Text livesText;
  2. Viết void ShowHud(): scoreText.text = "Score: " + score; và livesText.text = "Lives: " + lives;
  3. Gọi ShowHud() ở cuối Start, trong BrickBroken và trong BallLost.

Nhấn Chơi: Score: 0 và Lives: 3 sẽ hiển thị và thay đổi khi bạn chơi. Sau đó nhấn Kiểm tra.

Tự làm thử

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();
    }
}

Tất cả bài học trong Trò chơi Unity: phá gạch

Tự luyện tập: Playground Unity