Menu
CoddyTech

Hiển thị điểm số

Thuộc phần Xây dựng trò chơi thực tế trong hành trình Unity của Coddy. Bài học 2 trên 60.

text của văn bản là một chuỗi, vì vậy phải chuyển số thành văn bản trước khi hiển thị. Nối số với một chuỗi bằng + sẽ làm việc đó: "Wood: " + wood cho ra Wood: 12 khi wood là 12, còn wood.ToString() cho ra 12. Riêng số nguyên không phù hợp: woodText.text = wood; gây lỗi CS0029, Không thể chuyển đổi ngầm định kiểu 'int' thành 'string'.

Số được lưu trong trường int, còn văn bản chỉ hiển thị số đó. Một phương thức cập nhật văn bản từ trường này; mỗi khi số thay đổi, phương thức sẽ được gọi. Start() cũng gọi phương thức, nhờ vậy khung hình đầu tiên hiển thị giá trị thực thay vì giá trị đã nhập trong Inspector. Ở đây, nhấn Space sẽ chặt 3 khúc gỗ:

public TMP_Text woodText;
private int wood;

void Start()
{
    ShowWood();
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        wood += 3;
        ShowWood();
    }
}

void ShowWood()
{
    woodText.text = "Wood: " + wood;
}

Văn bản chỉ thay đổi khi wood thay đổi. Cập nhật văn bản trong mỗi lần gọi Update() cũng cho kết quả tương tự, nhưng sẽ tạo chuỗi mới 60 lần mỗi giây mà chẳng cần thiết. Thứ tự rất quan trọng: nếu gọi ShowWood() trước wood += 3, số gỗ hiển thị sẽ là số cũ, chậm hơn một lần nhấn.

challenge icon

Thử thách

Dễ

Hiển thị số hạt giống và cây trên màn hình.

  1. Trong Gardener.cs, viết void ShowCounts() để đặt seedsText.text thành "Seeds: " + seeds và treesText.text thành "Trees: " + trees.
  2. Gọi hàm này trong Start() mới và trong câu lệnh if trồng cây, sau trees++;.

Nhấn Chơi: dòng chữ hiển thị Seeds: 5 và Trees: 0, rồi thay đổi sau mỗi cây non. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;
using TMPro;

public class Gardener : MonoBehaviour
{
    public float speed = 4f;
    public int seeds = 10;
    public GameObject saplingPrefab;
    public TMP_Text seedsText;
    public TMP_Text treesText;
    private int trees;

    void Update()
    {
        float move = Input.GetAxisRaw("Horizontal");
        transform.Translate(move * speed * Time.deltaTime, 0f, 0f);

        if (Input.GetKeyDown(KeyCode.Space) && seeds > 0)
        {
            Vector3 spot = new Vector3(transform.position.x, 0.5f, 1.5f);
            Instantiate(saplingPrefab, spot, Quaternion.identity);
            seeds--;
            trees++;
        }
    }

    // Hiển thị Seeds: và Trees: trong hai ô văn bản ngay từ khung hình đầu tiên
}

Tất cả bài học trong Xây dựng trò chơi thực tế

Tự luyện tập: Playground Unity