Unity3d中文字体大小优化
在游戏开发过程中,为了美观的UI界面和一致的显示效果,大部分游戏都会使用动态字体来表现文字。尤其是在这个看脸的时代,一个字体已经不能满足UI学生对美观的需求,所以我们经常会找几个两三兆到十几兆的字体文件,既占包又占内存。因此,字体的合理使用和优化成为项目优化中后期必不可少的一步。本文介绍了“无双”团队进行字体切割的思路和方法。
◆ ◆◆
问题描述
我们在“绝世”项目中使用了两套字体。粗体显示大部分已建立的文本、玩家昵称、对话等。隶书字体显示一些标题、武将姓名、头衔、重要对话等需要美化的文字。
优化前我们习惯性的在UWA平台(www.uwa4d.com)测试了一下,在报告里查了一下:内存管理>;& gt特定资源信息> & gt本页字体资源。如下图所示,当时从内存图中看到,字体资源占用内存高达12MB。
让我先表扬一下UWA评估报告,它在定位问题资源方面确实很有效率。报告明确指出了两个可以优化的方向:1)内存占用;2)峰值量。峰值为2表示每种字体都有冗余资源。
原因如下:
1)游戏前期落地阶段的场景,以及其中用到的地图、字体等资源,往往无法加载AssetBundle。如果地图、字体等这些资源依赖于AssetBundle,那么项目中就会有两个副本。
2)内存占用很好理解。基本上字体的磁盘容量等于内存占用。
◆◆ ◆
最佳建议
1.字体切割
既然接下来要做字体简化,那么在落地阶段/游戏阶段就可以针对不同的应用场景设计不同的裁剪字体。最后,我们的设计如下图所示:
2.实际操作
裁剪字体的工具有很多,我们选择的工具是FontSubsetGUI,足够简单。你只需要准备一个txt文件,里面包含你需要的字符和原来的TTF文件。运行FontSubsetGUI,选择TTF文件和TXT文件的路径,继续生成新的TTF文件。
◆◆◆
效果与总结
简化后在UWA上重新测试,最终字体占用内存从12MB降低到4.9MB,效果突出。
通过以上优化操作,笔者得出以下结论:
根据不同字体的应用场景,设计了一个高效简化的裁剪字库。
应该注意,同一字体资源可能依赖于AssetBundle内部和外部。如果依赖无法避免,那么就要单独设计切割字库。