Unity TMP(TextMesh Pro)的中文输入相关问题

开篇废话

我当时为什么要安装这个鬼玩意,之前就没搞明白,今天拿来重新折磨自己……

场景描述

一.什么也没设置,默认打文本,但中文全是口口

总而言之就是这个样子。

口口是老朋友了,反正要么是字体的问题,要么是字符集的问题。打卡开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文件它却认不了。此外,还发现资源路径不能包含中文,否则即使它认了也有可能认不全,导致字体丢失。

解决方法

更改字体名称和文件类型。下载软件FontCreatoricon-default.png?t=N7T8https://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,如果还是丢失,那就考虑换个字体,或者缺的不多凑合用吧。

现在将得到的字体资源拖入

就可以显示中文了。

工具链接

正文里有了,只是在这里再总结一次

7000中文字符集 提取码ssnu           再次感谢张不无-Unity大佬

fontcreator

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值