Unity TextMeshPro使用自建中文字体

TextMeshPro
  TextMeshPro是Unity新一代字体,是 Unity 的最终文本解决方案。它是 Unity UI Text 和旧版 Text Mesh 的完美替代方案。功能强大、易于使用、性能高效。目前TextMeshPro对中文的支持也还可以,不过默认不能用,需要自己成生成。
  本文就介绍TextMeshPro中文字体文件的生成方法,并且分析有可能出现中文乱码的原因。

中文字体生成方法
  首先准备一个原生的中文字体文件(.ttf、.ttc)等,在Windows10操作系统下的C:\Windows\Fonts目录下有很多Windows自带的字体文件可以使用。找到一个带有中文的字体,直接Ctrl+C、Ctrl+V复制到桌面就可以看到字体文件了,双击字体文件可以预览字体。右键字体文件的属性,如果看到文件只有不到1MB大小,那大概率是没有中文字体的,即使双击后能看到中文,也是Fallback其它字体的。

  这个是微软雅黑字体 常规字体,可以用来生成TextMeshPro字体。添加到Unity中。
  看到字体后,直接右键Create-TextMeshPro-Font Asset就可以生成TextMeshPro字体,但是生成的是动态字体文件,即用到什么字才加入到字体文件中,不用到时不加入。这种方式比较简单,生成的字体文件很小(用到几个字就有几个字的大小),但是性能较差,而且可能会出现很多bug,比如没有加入到的字体,就会显示乱码。

  下面重点讲解静态字体的生成方法。

静态字体生成方法
  在Unity中,打开顶部菜单栏的Window-TextMeshPro-FontAssetCreator,打开面板。

 

  导入TextMeshPro包,不导入的话不会显示文字(英文也不显示)。

  将原生字体文件拖入到Source Font File

 

  各个参数可以在这个博客中查看详细介绍。 Unity 中 创建 TextMeshPro 中文字体
  我要说的是,创建中文字体与英文字体不同,英文字符很少,而且比较简单,所以创建中文时有几个参数是要非常要注意的。
  Character Set最好选Characters from File,Character File指定一个中文字符文件,文件链接:所有中文字符。打开链接后,右键网页,点“网页另存为”,就可以保存所有中文字符文件“chinese.txt”了,然后拖入到上面去。
  Atlas Resolution参数一定要尽可能地很大,Sampling Point Size尽可能地小,才能不出现中文乱码!Padding参数为Sampling Point Size的1/10就可以了。

 

  生成成功后,点击保存,将生成的字体文件拖入到TextMeshPro文字中就可以了。


可以看到,无论怎么放大,字体都不会失真。

posted @ 2023-08-22 13:57  onecyl  阅读(2337)  评论(0编辑  收藏  举报