[Unity] 多语言字体的坑

1.前置问题

  • UGUI中Text设置的FontSize跟RectTransform的Height经常性的不一致,Height需要比FontSize大一些
  • 不同的FontSize,需要的偏差值不同
  • 不同字体,需要的偏差值也不同
中文字体24号字可显示的临界值 (+7)
Height=30(+6)显示不出24号字
中文字体40号字可显示的临界值 (+13)
Height=52(+12)显示不出40号字
泰文字体Height=35(+11)显示不出24号字,可显临界值是36

2.项目中多语言用不同字体的问题

  我们项目中,不同的语言使用的字体是不同的。但日常开发中大家只会关注中文,界面布局、组件参数的设置都是基于可见的中文文字做的。由于上面不同字体Height与FontSize偏差值不同的问题,导致游戏在切换语言后,出现两种问题:

  1. 文字消失:不勾选BestFit的地方,当某种字体需要的偏差值比中文的更大时,界面上文字就不可见了。
  2. 文字变大或变小:勾选BestFit的地方,文字会改变大小适配有限的空间,但由于每种字体需要的空间不同,就会出现大小不一致的问题。

3.使用FontCreator处理差异

  • 字体相关概念的介绍:字体 | 字母剖析
  • FontCreator Version 12
方案:将所有字体的 Metrics(度量) 跟 General(头部) 设置统一参数
面板入口
Metrics(度量)

这里有两个Calculate按钮,可以点一下,它会根据字体的内容优化一下各项参数

General(头部)

General里Units per em:数值越大字体越小

  处理多个字体的差异,可以无脑将两个页签的参数全部复制粘贴应用即可。我们是用中文做开发,那么将中文字体的参数作为标准值,应用到其他字体。


上面方案是可以消除差异,不过文字显示出来的大小就不对了。感觉上可以通过其他参数修正过来,后面找到再记录吧。目前可以通过粗暴的调整Metrics里的Win Ascent、Win Descent、Ascender、Descender几个参数解决问题。

你可能感兴趣的:([Unity] 多语言字体的坑)