TextMeshPro

文档

[官方文档](TextMesh Pro Documentation | TextMeshPro | 4.0.0-pre.2 (unity3d.com))

Unity 中的 TextMesh Pro 简介 |科德科 — Introduction to TextMesh Pro in Unity | Kodeco

[UGUI图文混排一]TextMehPro(TMP)使用手册 - 知乎 (zhihu.com)

动态/静态字体区别

动态字体资源 |文本网格专业版 |4.0.0-pre.2 — Dynamic fonts assets | TextMeshPro | 4.0.0-pre.2 (unity3d.com)

TextMeshPro现在又自动扩容机制,即指定字体自动使用字体中的文字,不用手动生成,代价是稍许消耗.

动态字体需要保留原来的字体文件(.ttf.otf),不然无法动态生成,这意味者会增大包体,而静态字体可以生成之后删除

制作中文字用得到的常用字

wy-luke/Unity-TextMeshPro-Chinese-Characters-Set

标签

Unity手游实战:从0开始SLG——TextMeshPro(三)Rich Text - 知乎 (zhihu.com)

[UGUI图文混排二]TMP支持的富文本(Rich Text)标签 - 知乎 (zhihu.com)

可以查看这个类 TMP_RichTextTagsCommon.cs

  • 给图文中的图加颜色 <sprite index=0 color=#FFEB04>

  • 缩进 <line-indent=15%>

  • 图文帧动画的图帧动画,只支持2帧<anim="first frame, last frame, frame rate"> eg: <sprite index=0 anim="1,2,1"> 注:rate 越小越慢,最小为1

换行

image-20240503212053605

这里说明一下LineBreaking Following CharactersLineBreaking Leading Characters

LineBreaking Following Characters: 里面定义的标点字符,表示跟随即不能出现在句首,例如句号逗号。。。

LineBreaking Leading Characters:定义的标点符号,表示可以启新行,能出现在句首,例如括号。。。

TextMeshPro打包AssetBundle

当导入TestMeshPro的时候会自动导入一些资源包,大部分都在Resources文件夹下

image-20240503221431727

image-20240503211840790

操作步骤

  1. 将TextMeshPro包变成本地包

image-20240503220912444

  1. 修改源代码

    主要是修改TMP_Settings中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/// <summary>
/// Get a singleton instance of the settings class.
/// </summary>
public static TMP_Settings instance
{
get
{
if (TMP_Settings.s_Instance == null)
{
//从这里可以看到是从Resources加载
TMP_Settings.s_Instance = Resources.Load<TMP_Settings>("TMP Settings");

//在这里会加载TMP_Setting,如果没有就导入资源包
#if UNITY_EDITOR
// Make sure TextMesh Pro UPM packages resources have been added to the user project
if (TMP_Settings.s_Instance == null)
{
// Open TMP Resources Importer
TMP_PackageResourceImporterWindow.ShowPackageImporterWindow();
}
#endif
}

return TMP_Settings.s_Instance;
}
}

修改为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
        public static TMP_Settings instance
{
get
{
if (TMP_Settings.s_Instance == null)
{
//TMP_Settings.s_Instance = Resources.Load<TMP_Settings>("TMP Settings");
#if UNITY_EDITOR
//使用编辑器加载
TMP_Settings.s_Instance = AssetDatabase.LoadAssetAtPath<TMP_Settings>("Assets/Assetbundle/fonts/TMP Settings.asset");
// Make sure TextMesh Pro UPM packages resources have been added to the user project
if (TMP_Settings.s_Instance == null)
{
// Open TMP Resources Importer
TMP_PackageResourceImporterWindow.ShowPackageImporterWindow();
}
#endif
}

return TMP_Settings.s_Instance;
}
set
{
//runtime下 使用 set 赋值
TMP_Settings.s_Instance = value;
}
}

在启动运行时

1
TMP_Settings.instance = GameEngine.AssetModule.LoadAsset<TMP_Settings>("fonts/TMP Settings.asset");