
Unity对于中文字体的支持实在是不太友好,之前在TextMeshPro中就遇到过,但是也一直没时间解决。正好这次在WebGL中再次遇到了,就一次性把这个问题解决掉吧,顺便写篇文章记录下一些处理方案。
不想了解原理,只想拿到最终结果的友友下面的内容就不用看了,我查阅了一些资料,给出了一些参考的解决方案。
我把所有的资料都放在公众号(打工人小棋)里了,关注后发送指令:中文字体,就可以获取到下载链接:

这里参考了github上的一个项目:https://github.com/wy-luke/Unity-TextMeshPro-Chinese-Characters-Set
你可以去github上下载下来,也可以在我分享的网盘链接中找到,
文件夹名称是:Unity-TextMeshPro-Chinese-Characters-Set-main
直接把 7000.unitypackage 拖拽到你的项目中

点击import导入进来即可:

然后把TMP中的字体替换成导入后的字体,就能正确显示中文了

TextMeshPro 是 Unity 的最终文本解决方案。它是 Unity UI Text 和旧版 Text Mesh 的完美替代方案。功能强大且易于使用的 TextMeshPro(也称为 TMP)使用高级文本渲染技巧以及一组自定义着色器;它大幅改进了视觉质量,同时为用户创建文本样式和纹理提供了难以置信的灵活度。
但是他也给中国开发者带来麻烦,默认的TextMeshPro字体并不支持中文,如果你强行输入中文内容,就会显示几个框框,比如:

这是因为默认版本的字体包中不包含中文字体,框框示意你此处空白,而不是真的显示框框,运行后就会变成空白了。
所以我们需要用创建一个包含中文字体的字体包。
阿里巴巴普惠体是一套全球永久免费正版商用的字体家族,这里的字体几乎都支持商用,所以你可以在这里选择喜欢的字体并且下载。
https://www.alibabafonts.com/#/font

下载其中一个字体后,解压后可以看到里面的内容:

Unity支持的字体格式为TrueType 字体(.ttf 文件)和OpenType 字体(.otf 文件), 这里可以任选一个拖拽到你的项目中。

这里我们先不使用 TextMeshPro ,直接用 Legacy 文本来检验下字体是否显示正确。

选中刚刚导入的阿里巴巴字体,文本:你好,我是阿里巴巴普惠体

这时就能在Scene窗口中看到正确的效果了

很明显可以感觉到Legacy版本的Text有点模糊,效果也不太好。接下去我们用TMP版本的。
当你右键创建一个TMP文本时,会弹窗Install窗口,按照提示安装完成,然后点击

关于创建字体的流程,有一篇文章已经讲的很清晰,可以直接跳转按步骤操作即可。
https://blog.csdn.net/qq_37454669/article/details/121128100
之前我在另一篇关于WebGL的文章中提过,使用Unity默认的Arial会导致打包出来的游戏无法显示中文。
https://www.bilibili.com/read/cv36711973/?spm_id_from=333.999.0.0
这里我们来测试下,使用导入的字体后能否正确显示。
案例中我使用了Legacy Text 和 Text Mesh Pro,新旧版本都尝试了。
将他们的字体修改为阿里巴巴普惠体

打包运行之后,可以看到,两个版本的文本组件都正确显示出来了。

我使用了github项目中帮我们弄好的TMP字体,感觉比我弄得好看多了

大家也可以自己选择下字体,调一下看看效果,有好看的字体也欢迎分享下~
https://github.com/wy-luke/Unity-TextMeshPro-Chinese-Characters-Set
https://blog.csdn.net/qq_44284055/article/details/132393719
https://zhuanlan.zhihu.com/p/109593054
https://discussions.unity.com/t/chinese-font-problems/679971/4
https://discussions.unity.com/t/does-text-mesh-pro-support-simplified-chinese/717808
https://blog.csdn.net/liu442620190/article/details/82685266