当需要在Unity中具有中文UI的时候,会遇到中文或者标点符号不显示,取而代之的是□。这是由于默认字体不支持中文,或者中文字体不包含中文字符编码库。
The character with Unicode value XXX was not found in the [LiberationSans SDF] font asset or any potential fallbacks. It was replaced by Unicode character \u25A1 in text object [Text].

中文显示□
修复后

解决方法之一,高效方法,以TextMeshPro为例:

  1.  在网上下载一个中文字体包,但是这种途径有可能失败,最把稳的是在 C:\Windows\Fonts 中挑一个中文字体拖到Unity素材文件中:

  2.  在package manager中安装 TextMeshPro,如果已经在用最好,那么选中拖入的字体文件,右键>Create>TextMeshPro>Font Asset

  3. 然后直接就可以使用中文字体啦!替换成新生成的Untiy字体文件就可以了!!但是该方法的问题是,它只会自动支持动态(就是你已经输入到Text文本框)的文字,如果你多语言切换,在代码中更新文本框中的内容时,不曾出现过的字体它还是显示不出来。如下图,只有你输入到文本框里过的字它会包括,其它就不会。此外,文字过多时这个也就麻烦了。


解决方法之二,传统方法,以TextMeshPro为例:

  1. 在网上下载一个中文字体包,但是这种途径有可能失败,最把稳的是在 C:\Windows\Fonts 中挑一个中文字体拖到Unity素材文件中:

  2.  在package manager中安装 TextMeshPro,如果已经在用最好,然后Window>TextMeshPro>Font Asset Creator

  3. 同方法一原理一样,但是这个批量处理,在Source Font File 中选择刚才导入的中文字体,然后Character Set中选择来自文件, 文件为.txt格式(自己创建一个)包含所有可能用到的中文字符结尾有资源(一般来说三千来个,根据自己需要增删字符和标点符号),也可以选择手动输入(何必呢)

  4.  接着就是点击Generate,这里建议是先使用低分辨率和几个中文字符“试水”,这样很快且高效;如果成功显示中文了再把所有字符包括进去,将分辨率提高一些,一般需要几十秒来生成,可以参考以下设置(更多设置参数请参考Font Asset Creator | TextMeshPro | 4.0.0-pre.2)。

  5. 生成完成后就是一个体积几十MB的文字群贴图(所以分辨率得高)直接保存后就可以使用了,如果你已经广泛使用了其它不显示中文的字体而不想一个一个的该,可以尝试再原有字体设置里把FallBack字体加上生成的字体(注意第一次生成成功后下一次Save会直接覆盖原字体包)! 
将生成好的字体赋到目标字体上

文字库可以在这里下载,3500字版本应该够用了

wy-luke/Unity-TextMeshPro-Chinese-Characters-Set: 用以创建 Unity TextMeshPro 中文字体,3500 / 7000 常用汉字库、符号库。Used to create Unity TextMeshPro Chinese font.

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐