问题
- 某些字符在不同的平台上显示为不同的字体
- 某些字符在一些平台上可以显示,在其他平台上不显示或显示为不同的字体
- 字符显示不正确,变成了一些奇怪的东西
原因
- 使用的字体是动态字体,动态生成的字体却是其他字体。
- 这个字体是用户导入/自定的,并且没有在Inspector-Font Import Settings中勾选 Font Data。此时Unity在试图为字符查找字体时就会失败,因为字体并没有被嵌入到游戏中,目标平台也没有安装指定字体。
- 字体文件缺失所需的字符。
- 有些目标平台如WebGL及大量主机不包含Unity可以访问并用于渲染字体的操作系统默认字体。
解决方案
如果字体没有勾选Incl. Font Data复选框,把它勾上。这样Unity在生成可执行程序时就会嵌入字体,程序运行时就可以使用这些字体了。
如果Unity找不到需要的字体(font)或字符(glyph),它就会尝试Font Names域列出的字体,寻找系统中名称相符的字体,或者用户机器上是否装有需要的字形。您工程中字体都有Font Names域,其中包含了对fallback字体的引用,Unity会在需要的时候使用这些字体。
如果找不到任何需要的fallback字体(或字形),Unity会使用预定义的全局fallback字体,具体是什么字体取决于当前平台。
所以,推荐您将所有需要的字体都嵌入到工程里,最好同时嵌入Font Names域中的fallback字体。(例如:font1, font2, font3),并且最好包含字体数据。
更多信息
请查阅以下链接:
- http://docs.unity3d.com/Manual/class-Font.html
- http://forum.unity3d.com/threads/thai-font-fallback-for-unity-android.225197/
- http://answers.unity3d.com/questions/974498/how-do-you-make-fallback-fonts-work.html