开篇废话
我当时为什么要安装这个鬼玩意,之前就没搞明白,今天拿来重新折磨自己……
场景描述
一.什么也没设置,默认打文本,但中文全是口口
总而言之就是这个样子。
口口是老朋友了,反正要么是字体的问题,要么是字符集的问题。打卡开Inspector一看,在TextMeshPro里发现了一句熟悉但拼在一起不认识的英文:字体资源。
点击跳转到相应Resources文件夹,发现其是.Asset文件。猜测默认字体资源没有包含中文,搜索了解到其应该以以下方法创建:
解决方法
1. 打开Window—>TextMeshPro—>Font Asset Creator
初始界面如图
2. 设置Source Font File为字体文件
这里我直接去C:\Windows\Fonts目录随便拿一个,也可以使用网上下载的其它字体。请记得保证该字体包含中文字体。
3. 设置Character Set为Characters from File
而后新建一个文本文件,将其拖到Character File上。烘焙的所有字体将从该文本文件中找到,因此该File文件应是一个包含足够多的常用中文字符的文本文档。如果你没有,这里贴一个下载链接7000中文字符集,感谢大佬@张不无-Unity的分享。
Atalas Resolution为清晰度,简单认为数值越高结果越清晰。Render Mode使用默认的SDFAA即可满足大部分需要。
4.点击Generate Font Atlas即可创建新的字体资源,将其拖入TMP的Font Asset即可使用该字体。
为什么这里没图?因为我遇到了下一个问题
二. 生成字体资源时报错Error Code [Invalid_File_Format]
Font Asset Creator - Error Code [Invalid_File_Format] has occurred trying to load the [Name_Of_Font] font file. This typically results from the use of an incompatible or corrupted font file.
个人理解为文件类型不兼容。虽然我拿过来的的确是个字体文件,它也确实能拖到Source Font File栏里,但它确实不认。
在面板右键字体打开Properties后发现如下字样:
Unity会认.ttf文件,但直接从Windows文件夹拖过来的.TTF文件它却认不了。此外,还发现资源路径不能包含中文,否则即使它认了也有可能认不全,导致字体丢失。
解决方法
更改字体名称和文件类型。下载软件FontCreatorhttps://fontcreator.com.cn/download/按如下方法操作,或者可以直接参考修改字体名称原来这么简单
将原字体文件拖进来,而后选择Font-Properties
点击Family Name旁边的+1
点击右上角减号,删去所有中文名称,然后点OK
完成后点击File-Export Font-Export Desktop Font,随便导出到哪个你喜欢的地方,我这里直接扔回了项目的Resources里。
如果现在拖进来的字体有一个小三角图标,证明成功。
此时再重新打开Font Asset Creator,点击Generate Font Atlas即可成功读取并生成。
点击Save即可保存字体资源,以后使用也可以直接使用此.Asset文件,不用再重新生成。
现在再打开你的Text(TMP)组件,将刚刚得到的字体文件拖到Font Asset上
你就(有可能)发现,还不行。
三. 字体烘焙丢失
是的,折磨还没结束。如果你和我一样还在踩坑受折磨,容我安慰你的心灵。
刚刚烘焙完成时,我们发现字体只烘焙了424/1283个。成功率极低压根没烘进去多少暂且不谈了,我的字数也不是一千多啊?我文本文档里七千多字呢!
解决方法
排除字体路径的中文问题及其它文题后,显然问题已经不能出现在字体上了。那就只能是我们七千多字的文本文件出了问题。
在面板单击该文件,查看Inspector,发现:
中文全是乱码。好了,这下还是回到了字符集编码的问题上。
双击该文件,打开VS,选择高级保存选项
——————如果你没有高级保存选项,在VS点击工具-自定义
选择命令栏,添加命令
在类别栏找到文件,命令栏找到高级保存选项
点击确定后关闭窗口即可。
点开发现编码为简体中文(GB2312)
将其改成Unicode,点击确定,保存后重复之前的烘焙操作。
此时再生成,你应该能发现生成速度慢了许多
最好的结果是Missing characters为0,如果还是丢失,那就考虑换个字体,或者缺的不多凑合用吧。
现在将得到的字体资源拖入
就可以显示中文了。
工具链接
正文里有了,只是在这里再总结一次