总的笔记:https://www.cnblogs.com/guobaoxu/p/12055930.html
TMPro,完整的叫TextMeshPro,原本是个插件,后来Unity逐渐做成了内置,主要特点是在放大之后不会模糊,逐渐成为主流,但是他的字库是需要自己制作的,而不是直接用的字体文件,随之而来的缺点就是字库没办法做得足够完整,也失去了动态字体。关于TMPro的汉化,分成两个部分,文字和字体,本文讲字体替换,文字的修改请看这篇:Unity手游汉化笔记①:UABE+AssetStudio编辑MonoBehavior类型Asset
一、使用工具:
Unity版本:2018.4.5f1
AssetStudio(地址:https://www.perfare.net/tag/assetstudio)
UABE(地址:https://7daystodie.com/forums/showthread.php?22675-Unity-Assets-Bundle-Extractor)
二、字体替换
1.用Unity做一个简单的Demo
效果如下:
做Demo的过程中你应该会发现,一个TMPro的字体以一个SDF结尾的Asset文件呈现,展开后如下:
实际上还有一个MonoBehaviour,整体类似于BMFont,所以我在替换的时候和BMFont思路类似,通过维持设置来保证纹理不变化,只替换MonoBehavior和图片
2.获得新字体
先用Asset Studio来预览,打开并加载Data文件夹(Android的话在Asset/bin/Data),在MonoBehavior分类下,会找到一个simfang SDF,这就是我们的字体最关键的部分了,一般TMPro的字体都会以SDF结尾,他的参数列表很长,如下:
我们根据这里面的一些信息来制作新字体的Demo,使用相同版本的Unity来制作。
在Unity中,先从菜单栏-Window-TextMeshPro-FontAssetCreator调出Font Asset Creator,这里的设置在MonoBehavior中体现在了m_CreationSettings部分,可以把Asset Studio中的参数列表放进一个编辑器里,用搜索功能找到他,我们要保持设置,具体如下:
Sampling Point Size 对应右侧pointSizeSamplingMode和pointSize
Padding对应右侧padding
Packing Method对应右侧packingMode
Atlas Resolution对应atlasWidth和atlasHeight
Character Set及其随后小方框对应右侧characterSetSelectionMode、characterSequence、referencedFontAssetGUI、referencedTextAssetGUID
Render Mode对应右侧renderMode(看不懂对应关系,好在一般都是默认值)
Get Kerning Pairs对应右侧includeFonrFeatures
Generate Font Atlas后就得到了图片,Save之后就得到了Asset文件,随便弄个Text,把字体绑上去,然后生成整个项目
3.替换
剩下的步骤就和替换BMFont的时候基本一样了,用UABE导出新旧字体的图片、MonoBehavior参数文本,图片直接导回去,MonoBehavior要做以下修改:
① 指针部分,把参数文本复制到带搜索功能的编辑器里,先搜索关键词“pathid”(关闭大小写匹配),有几个部分:
最开头的m_GameObject和m_Script:这是MonoBehavior都需要的,应该保持旧的数值
material:这是一个关键的东西,字体绑定的纹理,这里也要维持旧的数值
m_AtlasTextures:指向图片,也要维持旧的数值
其他的匹配项都是0,不用管。
② 哈希值,搜索关键词“hash”和“guid”,各有两处匹配,这两个我也选择了保留旧的数值,以免出错
4.结果