U4S5L7——脚本控制TMP

本章代码关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
TMPro                                //TextMeshPro相关组件的命名空间
TextMeshProUGUI //TextMeshPro的UI文本组件
textMeshProUGUI.text //显示文本
textMeshProUGUI.font //字体
textMeshProUGUI.fontSize //字体大小
textMeshProUGUI.color //字体颜色
textMeshProUGUI.alignment //对齐方式
textMeshProUGUI.lineSpacing //行间距
textMeshProUGUI.richText //是否启用富文本
textMeshProUGUI.SetText() //设置显示文本
textMeshProUGUI.Rebuild() //强制重新构建文本网格,通常在文本内容或样式更改后使用,需要传入一个CanvasUpdate确认更新时机
CanvasUpdate //Canvas更新时机枚举
textMeshProUGUI.ForceMeshUpdate() //强制更新文本网格,运行时动态更改文本时调用

脚本获取TMP UI组件

  1. 需要引用 TMPro​ 命名空间
  2. TMP UI组件名为 TextMeshProUGUI
1
2
3
4
5
6
7
using UnityEngine;
using TMPro;

public class Lesson3 : MonoBehaviour
{
public TextMeshProUGUI tmpUIText;
}

image

TMP UI组件常用属性

  1. 文本内容

    直接修改 text​ 属性即可修改显示的文本内容

    1
    2
    3
    4
    5
    6
    public TextMeshProUGUI tmpUIText;

    private void Start()
    {
    tmpUIText.text = "123123aaafff";
    }

    显示效果:

    image

  2. 字体

    从外部关联或者加载一个 TMP_FontAsset​ 类型的资源,然后通过 font​ 属性即可更换显示字体

    1
    2
    3
    4
    5
    6
    7
    8
    public TextMeshProUGUI tmpUIText;
    public TMP_FontAsset fontAsset; //可以通过外部关联一个TMP字体资源,也可以读取字体

    private void Start()
    {
    tmpUIText.text = "123123aaafff";
    tmpUIText.font = fontAsset;
    }

    显示效果:

    image

    image

  3. 字体大小

    直接修改 fontSize​ 属性即可修改显示的文本字号大小

    1
    2
    3
    4
    5
    6
    7
    public TextMeshProUGUI tmpUIText;

    private void Start()
    {
    tmpUIText.text = "123123aaafff";
    tmpUIText.fontSize = 10;
    }
  4. 颜色

    直接修改 color​ 属性即可修改显示的文本顶点(整体)颜色

    1
    2
    3
    4
    5
    6
    7
    public TextMeshProUGUI tmpUIText;

    private void Start()
    {
    tmpUIText.text = "123123aaafff";
    tmpUIText.color = Color.black;
    }

    显示效果:

    image

  5. 对齐方式

    直接修改 alignment​ 属性即可修改显示的文本对齐方式,具体的对齐方式可见 TextAlignmentOptions​ 枚举的定义

    1
    2
    3
    4
    5
    6
    7
    public TextMeshProUGUI tmpUIText;

    private void Start()
    {
    tmpUIText.text = "123123aaafff";
    tmpUIText.alignment = TextAlignmentOptions.Center;
    }
  6. 行间距

    直接修改 lineSpacing​ 属性即可修改显示的文本行间距

    1
    2
    3
    4
    5
    6
    7
    public TextMeshProUGUI tmpUIText;

    private void Start()
    {
    tmpUIText.text = "123123\nabcdef\n!@#$%";
    tmpUIText.lineSpacing = 20;
    }

    显示效果(左为不调整,右为调整为20):

    image​​image

  7. 是否启用富文本

    richText​ 决定是否可以启用富文本

    1
    2
    3
    4
    5
    6
    public TextMeshProUGUI tmpUIText;

    private void Start()
    {
    tmpUIText.richText = true;
    }

TMP UI组件常用方法

  1. 设置文本内容,支持富文本格式

    除了 text​ 属性,还可以通过 SetText()​ 方法设置显示内容

    1
    tmpUIText.SetText("123123123123123");
  2. 强制重新构建文本网格,通常在文本内容或样式更改后使用

    需要传入一个 CanvasUpdate​ 枚举(位于 UnityEngine.UI​ 命名空间下),不同的枚举值代表重新构建的时机不同

    1
    2
    3
    4
    5
    6
    7
    public TextMeshProUGUI tmpUIText;

    private void Start()
    {
    tmpUIText.SetText("123123123123123");
    tmpUIText.Rebuild(UnityEngine.UI.CanvasUpdate.Prelayout);
    }

    各个枚举值代表的时机如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    public enum CanvasUpdate
    {
    Prelayout = 0, //布局前调用
    Layout = 1, //布局时调用
    PostLayout = 2 //布局后调用
    PreRender = 3, //渲染前调用
    LatePreRender = 4, //渲染后调用
    MaxUpdateValue = 5 //最后调用
    }
  3. 强制更新文本网格,运行时动态更改文本时调用

    TMP中的每个文字都有自己的网格,通过该方法可以强制更新文本网格

    image

    1
    2
    3
    4
    5
    6
    7
    public TextMeshProUGUI tmpUIText;

    private void Start()
    {
    tmpUIText.SetText("123123123123123");
    tmpUIText.ForceMeshUpdate();
    }
  4. 获取文本中的字符数

    1
    2
    3
    4
    5
    6
    7
    public TextMeshProUGUI tmpUIText;

    private void Start()
    {
    tmpUIText.SetText("123123123123123");
    print(tmpUIText.text.Length);
    }

    输出:

    image

UI事件监听

如果我们想要为TMP UI添加交互事件,可以使用 UGUI 的 EventTrigger​ 的方式

1
2
3
4
5
6
7
public class Lesson3 : MonoBehaviour
{
public void OnClickTmpUI()
{
print("文本被点击了");
}
}

image

点击文本输出:

image

如果点击未响应,请检查 TMP UI 组件的 Raycast Target:射线检测目标 是否开启

更多API

更多API,详见:Class TextMeshProUGUI | TextMeshPro | 4.0.0-pre.2 (unity3d.com)