Menu
CoddyTech

画布和文字

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

Unity 使用其 UI 系统绘制屏幕上的文本、按钮和条形图。在 Unity 6 中,GameObject > UI > Text - TextMeshPro 会添加一个名为 Text (TMP) 的文本对象;首次使用时,Unity 会询问你是否导入 TMP Essentials,文本需要它来获取字体。如果场景中还没有 Canvas,Unity 会创建一个,并将文本放入其中,同时创建一个供 UI 点击事件经过的 EventSystem。Canvas 会将其子对象绘制在摄像机画面上方,并固定在屏幕上的某个位置,无论摄像机朝向哪里。将其 Canvas Scaler 设置为 Scale With Screen Size,1920 x 1080,Match 0.5,就像本课程的每个场景一样,这样布局就能在任何屏幕尺寸下保持比例。

文本对象的组件是 TextMeshPro - Text (UI)。脚本会用其基类类型 TMP_Text 的字段来保存该组件,这个类型来自 TMPro 命名空间,并通过其 text 属性(一个字符串)修改显示内容。下面的脚本会在开始时设置关卡名称:

using UnityEngine;
using TMPro;

public class LevelIntro : MonoBehaviour
{
    public TMP_Text titleText;

    void Start()
    {
        titleText.text = "World 2: Ice Caves";
    }
}

将 Hierarchy 中的 Text (TMP) 对象拖到 Inspector 中的 Title Text 槽位,Unity 就会把它的文本组件放入字段中。如果没有 using TMPro;,名称 TMP_Text 就无法识别,脚本也无法编译(CS0246)。如果槽位留空,首次访问 titleText.text 时会抛出 UnassignedReferenceException。脚本写入的内容会替换 Inspector 中输入的 Text Input;新建文本时,该内容为 New Text。

challenge icon

挑战

简单

在顶部的 ZoneText 中显示探索者所在的区域。

  1. 在 Explorer.cs 中,添加 using TMPro; 和字段 public TMP_Text zoneText;。场景会将 ZoneText 关联到这个名称。
  2. 在 Update() 中,在注释下方设置 zoneText.text:当 transform.position.x 小于 2 时,将其设为 Zone: Beach;否则设为 Zone: Jungle。

按下“开始”,向右走到草地上:文本会变为 Jungle。然后点击“检查”。

亲手试试

using UnityEngine;

public class Explorer : MonoBehaviour
{
    public float speed = 4f;

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

        // 在 ZoneText 中显示区域:x 小于 2 时显示 Zone: Beach,x 大于或等于 2 时显示 Zone: Jungle。
    }
}

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

自己练习: Unity 在线编辑器