DungDaj 发表于 2022-4-23 14:24

Unity插件TextMeshPro使用中文的总结

1、中文问题

Unity的TextMashPro自带的几款字体都是英文字体,没有中文。
输入中午会出现【方块】


解决方案:添加中文字体
可以下载开源的中文字体。
例如【思源黑体】【思源宋体】。
2、动态字体

下载好中文字体后,导入到Unity。
然后可以创建动态字体:选择下载好的字体,右键-Create-TextMeshPro-Font Asset。
创建好的动态字体,会根据你使用过的文字,自动存储到Atlas中。



字体Atlas初始默认大小是1024x1024。大小可以自行修改。


3、静态字体

当使用的文字较多时,可以使用静态字体。
通常处理方式是下载一个【汉字常用3500字】、【中文常用5000字】等的一个txt文件,用Unicode编码保存。(txt文本,另存为——格式:utf8)
把这个txt文件导入Unity中。
在Unity中——>Window——>TextMeshPro——>Font Asset Creator中的Source Font Flie选择添加好的中文字体。
在Character Flie中选择3500常用字文件。
根据文字数量修改Atlas Resolution。
点击 Generate Font Atlas生成。


注意:文字过多,Atlas Resolution选择大小不要太小。
最后Save保存一下生成的字体asset。
4、字体后备Font Fallback

当静态字体的Atlas Resolution过小时。使用字体后,放大字体,会有边缘粘滞模糊。



3500字,Atlas Resolution是2048x2048

使用动态字体就不会出现这种问题:



动态字体

但是使用动态字体也有不方便,例如:使用思源宋体的.otf生成的动态字体Asset在使用中文标点符号和一些特殊文字符号的时候,依旧会出现【方块】。并不能像静态字体一样用txt方便的加入需要的符号、文字。
这个时候可以使用TextMeshPro的Font Fallback。Font Fallback可以从另一个FontAsset中获取不包含在当前FontAsset中的字符。
我们可以用Font Fallback来外挂一些低频使用、或者特殊的符号、字体。



我在动态字体Asset上”外挂“了一个包含中文标点符号的静态字体Asset

5、我的常用的方案

普通的汉字或者英文字母直接用动态字体就好。然后标点符号或者特殊符号(根据项目)制作成静态字体。用Font Fallback外挂到我使用的动态字体上。
6、在文字中插入图片sprite

在TextMashPro文本输入框中输入富文本标记<sprite="Default Sprite Asset" index=1>
Default Sprite Asset是图集的名称,index=1调用图集中的第一个sprite。图集固定放在Assets/TextMesh Pro/Examples & Extras/Resources/Sprite Assets/

Doris232 发表于 2022-4-23 14:26

动态字体是什么呀,在哪里下载。我下载了ttf格式的字体,导入unity中没有上述选项哎,求大神指导

TheLudGamer 发表于 2022-4-23 14:29

动态字体,就是用下载好的开源字体创建一个font asset。没有选项,是不是你没安装textmeshpro[思考]

FeastSC 发表于 2022-4-23 14:33

静态字体 Atlas Resolution怎么修改都会有边缘粘滞模糊。大佬知道原因吗

HuldaGnodim 发表于 2022-4-23 14:43

找到问题了,是因为生成的时候字号太小,而使用时的字号太大会导致边缘模糊。好像和 Atlas Resolution关系不大

DungDaj 发表于 2022-4-23 14:48

哦,大佬用的是Auto Size选项,会自动设置字号。所以不会出现我这个问题[赞同]

量子计算9 发表于 2022-4-23 14:50

我想问一下 当我使用了生僻字 如何添加生僻字?难道要重新生成一遍字体吗,我在游戏的ui界面上定义的文字使用的字体需要重新再配置一遍吗?

Baste 发表于 2022-4-23 14:57

老铁,动态字体如何在代码中手动更新,我发现他只有在编辑模式下往文本框手动输入文字它才会更新,但是代码中手动敲文字,依然会显示方框,说明代码中运行并不会手动更新字体文件
页: [1]
查看完整版本: Unity插件TextMeshPro使用中文的总结