Unity3d中文在部分机型显示不全解决方案

来源:互联网 发布:roboguide软件下载 编辑:程序博客网 时间:2024/05/01 10:05

游戏测试发现部分机型的UI上的中文显示不全,全都是碎的。后来发现原来unity3d中默认字体Arial在Android机型中会指向DroidSansFallback字体,而某些机型自己定制了字体。

参考Blog:

Unity在NGUI中默认动态字体Arial字体显示不完整解决方案

unity font研究小结

Android系统中默认字体DroidSans和DroidSansFallback字体分别为西文和包含东亚字体,当在DroidSans中找不到的字体会在DroidSansFallback中寻找。但是Android中寻找字体是根据文件名寻找,就是说随便什么字体我改为DroidSansFallback.ttf放入System/font目录下就可以成文系统默认字体,手机的字体随之改变,这就是自定义Android手机字体。

但是Unity3d在Android中寻找字体是根据字体名称,而非文件名称。也就是说MYingHeiGB18030C-Bold字体我将其文件名改为DroidSansFallback放入手机中,Android系统默认字体改变,而使用Arial默认字体的NGUI Label在运行时会因为找不到DroidSansFallback字体而显示不全。

所以解决方法就是导入一个字体,这里可以参照Unity手册http://docs.unity3d.com/Manual/class-Font.html

Unity圣典翻译http://game.ceeger.com/Components/class-Font.html,将字体设为动态,你可以在Incl. Font Data勾选将打包进安装包,不勾选字体将不打进去,下面的FontsName可以填入多个字体名,用逗号隔开,当第一个字体找不到时会依次查找下面备用的,直到找到对应文件名的字体或找完都找不到对应的。

PS:此处强调一点,我是看的这个教程Unity在NGUI中默认动态字体Arial字体显示不完整解决方案 修改的,我以为按照教程将其中的MYingHeiGB18030C-Bold字体换为其他的字体也可以,结果打包了好几次都不行,我还以为这个方法不行,最后才发现我测得Oppo的手机的默认字体就是MYingHeiGB18030C-Bold,结果在FontsName中我没写它。。。。

但是这种方法也有不好的地方,FontsName中要写很多字体名称也不能保证所有机型字体正常,因为总有人喜欢将手机字体自定义为默写小众的美化字体,所以如果追求完美想让所有的机型都显示正常,最好找一个不是很大但字符比较全的中文字体打进安装包中。同时我想在Android中获得系统默认字体名称在启动时传入unity,动态改变Lable字体不知道可不可行,心里觉得估计比较麻烦,还是希望Untiy以后会改进吧,或者可以让开发者对字体选择有更大控制权。

0 0