画布和文字
本课属于 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。
挑战
简单在顶部的 ZoneText 中显示探索者所在的区域。
- 在
Explorer.cs中,添加using TMPro;和字段public TMP_Text zoneText;。场景会将 ZoneText 关联到这个名称。 - 在
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 在线编辑器