Menu
CoddyTech

显示分数

本课属于 Coddy Unity 学习旅程的“打造真正的游戏”单元。第 2 课,共 60 课。

文本的 text 是一个字符串,所以数字必须先转换为文本才能显示。将数字与字符串用 + 拼接即可完成转换:当 wood 是 12 时,"Wood: " + wood 的结果是 Wood: 12,而 wood.ToString() 的结果是 12。单独的 int 不适用:woodText.text = wood; 会报错 CS0029,无法将类型“int”隐式转换为“string”。

数字存储在一个 int 字段中,文本只负责显示它。一个方法会根据字段的值重写文本;每次数字发生变化时都会调用它,Start() 也会调用它,这样第一帧显示的就是实际值,而不是在 Inspector 中输入的值。这里按下 Space 会砍下 3 根木头:

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

只有 wood 发生变化时,文本才会改变。每次 Update() 都重写文本,显示效果虽然一样,但会平白无故地每秒创建一个新的字符串 60 次。调用顺序很重要:如果在 wood += 3 之前调用 ShowWood(),显示的就会是旧数量,每按一次都会落后一步。

challenge icon

挑战

简单

在屏幕上显示园丁的种子数和树木数。

  1. 在 Gardener.cs 中,编写 void ShowCounts(),将 seedsText.text 设为 "Seeds: " + seeds,并将 treesText.text 设为 "Trees: " + trees。
  2. 在新建的 Start() 中调用它,并在种植用的 if 语句中,在 trees++; 之后调用它。

按下“开始”:屏幕上的文本显示 Seeds: 5 和 Trees: 0,并随着每棵树苗的种下而变化。然后点击“检查”。

亲手试试

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++;
        }
    }

    // 从第一帧开始,在两个文本中分别显示 Seeds: 和 Trees:
}

打造真正的游戏中的所有课

自己练习: Unity 在线编辑器