TextMeshPro(以下均简称为TMP)是使用在Unity中的一种强大的文本插件(恩,感觉跟PS差不多了…),在unity5.6时代好像就说要用这个插件来代替unity中自带的Text和TextMesh组件,但现在都unity2017.3了貌似还没把这个插件集成到unity中去。本文就大体介绍一下这个插件在UGUI下的使用方法(即TextMeshProUGUI组件的使用方法)

一、组件基本的添加使用。

直接在Unity的AssetStore中搜索TextMeshPro即可找到这个插件,然后下载导入工程即可。在需要挂载文本组件的物体的检视面板的最下面点击AddComponent,然后输入TextMeshProUGUI的全部或者部分,在列表中选中即可。如果要在脚本中引用这个组件,需要先声明引用命名空间:

using TMP;

然后声明变量即可,注意变量的类型是TextMeshProUGUI。

二、制作和使用字体资源的基本方法。

TMP字体是静态字体,静态字体的集合实际上就相当于一张字符图集。字体资源默认包含了一个材质、一张字符图集以及所有包含的字符信息、字体的相关设置信息等。

1、 创建一个字体资源

打开unity的 Window->TextMeshPro->FontAssetCreator,可以看到制作字体资源的工具面板。

在这个面板中:

Font Source是需要使用的模板动态字体,即做出来的静态字体的样式是和这个动态字体是一样的,而且后面CharactorSet属性指定的字符集内的所有字符在这个动态字体内也必须得有,否则显示不出来;

FontSize设置字号,这个默认即可;

FontPadding,内边距。这个属性的作用可以用一个“回”字来理解。字体本身是填充在“回”字里面的小“口”内的,而这个属性就是调节这个小“口”到外面的大“口”之间的间距的。这个有时候还是比较有用的。比如在制作字体特效时,如果需要很宽的描边,而如果这个属性设置的很小的话,材质中即使描边宽度那个属性设置成最大值,实际效果可能还是会偏小,满足不了要求。而如果把这个属性调大,那么最终的最大描边宽度就会大很多。

PackingMethod,打包方法,这个影响一般不是很大,默认即可。

AtlasResolution,图集分辨率,决定了图集的质量和大小,二者需要权衡一下。

CharactorSet,字符集,指定要把哪些字符打到字体资源的图集中去。只有在这个字符集内的字符才能显示出来。这个属性的设置,除了可以根据ASCII码或者Unicode范围来筛选FontSource中的字符外,还可以自己输入需要的所有字符、从txt文本中导入、从已有的字体资源中导入这些方法。

FontRenderMode和GetKerningPairs一般设置默认即可。

 

在以上所有属性设置完毕后,点击“GenerateFont Atlas”按钮即可开始生成字体资源,生成完成后,字符图集可以在右边空白处预览,所有打到字符图集内的字符和未打进去的字符都会字按钮下方列出来(一般不可见字符都不会打进去)。

预览字符突图集后,如果没有问题,即可点击最下方的“Sava TextMeshPro Font Asset”按钮保存字体资源以备使用,如果不满意,可以进行调整,重新生成。

2、 使用字体资源。

可以通过Creat->UI->TextMeshPro– Text来创建一个带有TextMeshProUGUI,当然也可以在任意需要的GameObject上添加这个组件。

添加完成后,把上面创建的字体资源拖到组件的文本输入框下方的FontAseet属性中即可使用这个字体资源了。

3、 在已有的字体资源中追加字符(字体资源)或重新制作已经被多处使用的字体资源。

在实际项目中,如果用着用着发现已有的字体资源中的字符不够用,可以制作一个新的字体资源,然后在旧的字体资源中的检视面板里,找到FallBack Font Assets,可以理解为备选字体资源,即当现有字体资源的字符集内找不到需要的字符时,便在备选的字体资源内查找。把新的追加的字体资源添加到备选字体资源内即可。另外也可以重新制作字体资源,把新增的字符打进去,保存时直接覆盖掉旧的字体资源即可。

4、 制作预制材质。

在字体资源下可以看到一个默认的材质,点击这个材质,点击其检视面板的右上角的齿轮,在弹出的菜单中点击“Creat Material Preset”,即可创建一个这个字体资源的预制材质,这个预制材质的名字不要乱改,最好以字体资源的名字开头,然后根据不同用途添加不同的后缀。创建好后,根据需要更改此材质的属性,然后在组件的Material Preset中选择该材质即可应用该材质的属性(如果乱改了材质的名称,可能会导致在此处找不到这个材质)

三、TMP对表情文字的支持及制作和使用方法。

毫无疑问,TMP是支持表情文字的,因为字符本身即是图片了,而表情本身也是图片,不同的只是使用时怎样引用这个图片而已。

1、 创建“表情包”

借助外部工具,比如TexturePackerGUI这个软件制作好图集以及每个表情对应的信息后,在unity中的Window->TextMeshPro->SpriteImportor,打开制作面板,把图集和文本描述信息拖到相应位置,点击“Create Sprite Asset”,然后保存到“合适位置”即可。这个合适的位置是可以配置的。在Poject中搜索TMP Settings,在其检视面板中找到Default Sprite Asset,里面可以指定默认的“表情包”资源,可以指定表情包的存放位置(即最下面的Path,上面所说的“合适的位置”)。

2、 使用表情包

在组件的文本框内使用sprite标签即可。如:

<sprite=默认表情包内要使用的表情的索引>

<sprite="表情包名称" index=要使用的表情的索引>

 <sprite="表情包名称" name="要使用的表情的名字">

默认情况下,表情是不受组件内的Color属性影响的,可以使用tint属性使之受组件内指定的Color的影响。使用如下:

 <sprite="表情包名称"name="要使用的表情的名字" tint=1>

当然,强大的TMP是可以让你自己入指定一个染色剂的,使用方法如下:

 <sprite="表情包名称" name="要使用的表情的名字" color=#ABCDEF>