我的游戏项目在上段时间已经上了泰国版本一段时间了,在上线前遇到一个问题,被搞到焦头烂额的,于是记录一下。
问题是这样的,项目本身是用Unity5.5.4版本制作的,游戏里面内置了一个精简版的微软雅黑的字体。然后在打包ios之后,发现所有的泰文都变成了一个方块里面有个问号。
于是觉得很奇怪,拿了项目组另外一个项目来试,这个项目是用Unity5.6.6来制作的,发现能正常显示泰文。
找找差别在哪里,拷贝了改项目用的字体,发现在5.5.4上面仍然显示不出泰文,然后把项目的Unity版本升级为5.6.6,发现泰文能显示了。于是高高兴兴的发版本。
结果在上线前运营验收功能的时候,发现很多界面的字显示超框或者显示不全。由于项目组本身并没有人懂泰文,所以之前一直没有发现这个问题,以为能显示就肯定是对的。到了上线前几天,由泰国本地人跑游戏测试,才发现这个问题,结果就变得非常着急了。因为不解决这个问题根本是不可能上线的,但上线的日期已经定了,广告也投了。
经过对比,发现安卓没有这个问题,旧版系统的iPhone也没有这个问题,只有iOS11以上的手机有显示问题。于是简单百度了一下,就发现了iOS11换了字体的说法,于是大家就以为问题找到了,并且无法解决,就开始傻傻的逐个界面修改。
但我一直对这个事情抱有怀疑,因为从原理上说不通,Unity使用的字体是自己放进去的,字体的原理也是图集,图片都是固定好的,怎么可能会由于系统字体变大,就影响到游戏本身的字体也变大呢?
于是拿出MacBookPro,做了几个demo来测试这个问题,还从网上下载了多个泰文字体作为对比,总算找到了原因。
首先,项目用的字体是一个精简版的微软雅黑,它里面是不包含泰文的。然后在没有泰文的情况下,游戏是自动使用了系统字体来补,所以游戏里面看到的的确是系统的字体,系统字体变大了游戏字体也变大了。于是找一个泰国字体放到游戏里面,发现一切问题都解决了,iOS和Android的显示完全一样了。
这里又回头测试了一下Unity5.5.4的问题,发现在5.5.4里面放入泰文字体,也是能正常的显示泰文的。但如果用系统默认字体,iOS上面的泰文就全部变成问号方框了。也就说明了一个问题,Unity5.5.4是存在字体的bug的,它读取不到iOS上面的泰文系统字体来显示。
最后还发现一个神奇的问题,不是所有泰文字体都能正常显示,其中有三个外观看起来很奇怪的字体,在Mac的编辑器上面显示泰文是正常的,但到了Unity5.5.4打出的iOS包里面,还是显示问号方框。所以试字体要试多几个,而且要真机测试比较稳妥。