原因

Unity 推荐使用 TextMesh Pro 来代替内置的现有文本组件如 Text Mesh 及 UI Text,因为 TextMesh Pro 可以渲染出非常清晰的文本。在使用过程中发现,发现有以下问题:

  1. TextMesh Pro 需要先生成一张静态字体图集,每当静态文字增加时,都需要打开自带的生成工具,一个参数一个参数的设置,非常麻烦,也不便于其他人员使用。

  2. 每一个字体资产都会生成一个图集,这对于相同字体,但是不同样式的字体资产就会冗余字体图集。

  3. 一个字体里通常不会包含所有的字符,当遇到缺失字符时,就会空缺显示,如果采用回调字体方式,又会增加 Draw Call,最好是可以采用备用字体生成在同一个图集里。

  4. 某些字符在首位字体里并不美观,需要可以指定使用某个备用字体来渲染。

目标

这个工具要解决这些问题,达成以下目标:

  1. 一键式生成预设字体图集

  2. 相同字体复用同一个图集

  3. 字符缺失的采用备用字体

  4. 指定字符只采用某个字体

示意图

Unity TextMesh Pro 文本组件之字体图集生成工具_Unity

源码

https://github.com/akof1314/UnityTMProFontCustomizedCreater

细节说明

每次生成字体图集时,都要通过 Font Asset Creator 来设置,繁琐且耗时。想要自动化的生成,就需要借鉴这个工具的实现,通过反射 【TextMeshPro-5.6-Editor.dll】可以看到 TMPro_FontAssetCreatorWindow 类的实现,但更好的方式是通过 Unity 2018 来安装 TextMesh Pro 组件,就可以在包目录下(C:\Users\Administrator\AppData\Local\Unity\cache\packages\packages.unity.com\com.unity.textmeshpro@1.3.0\Scripts\Editor)直接找到 【TMPro_FontAssetCreatorWindow.cs】源码文件。实现一个简单的界面,一键式操作,这样其他人员也可以自行使用。

另外,相同的字体资产会归位一类,在生成字体图集的时候,只会生成一张,如下图所示:
Unity TextMesh Pro 文本组件之字体图集生成工具_unity_02

对于缺失的字符,准备多个备用字体,最好字体样式比较相近。在生成完字体图集后,检查是否有【Missing Characters】,若有,则将这些缺失字符进入备用字体渲染,渲染完毕再拷贝到主字体图集,为了方便区别,拷贝到图集的右上角,如下图所示:
Unity TextMesh Pro 文本组件之字体图集生成工具_Unity_03

下面是对比效果:
Unity TextMesh Pro 文本组件之字体图集生成工具_复用_04
使用 MFYANSONG.OTF 字体单独渲染的效果

Unity TextMesh Pro 文本组件之字体图集生成工具_unity_05
使用 MFYANSONG.OTF 字体渲染 + 回调 SYHT.OTF 字体渲染缺失字的效果

Unity TextMesh Pro 文本组件之字体图集生成工具_github_06
使用 MFYANSONG.OTF 字体 + 备用 FZYaSong-B.TTF 字体 + 备用 SYHT.OTF 字体渲染的效果