Đ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.
Thử thách
Trung bìnhHiển thị điểm số và số mạng trên màn hình.
- Trong
GameManager, thêmusing TMPro;,public TMP_Text scoreText;vàpublic TMP_Text livesText; - Viết
void ShowHud():scoreText.text = "Score: " + score;vàlivesText.text = "Lives: " + lives; - 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
3Luồng trò chơi
Điểm số và mạngTự luyện tập: Playground Unity