显示分数
本课属于 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(),显示的就会是旧数量,每按一次都会落后一步。
挑战
简单在屏幕上显示园丁的种子数和树木数。
- 在
Gardener.cs中,编写void ShowCounts(),将seedsText.text设为"Seeds: " + seeds,并将treesText.text设为"Trees: " + trees。 - 在新建的
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 在线编辑器