如何精简Unity中使用的字体文件

http://t.zoukankan.com/lancidie-p-6285569.html

 

◆◆
问题描述

我们《极无双》项目中使用了两套字库。黑体字体来显示大部分既定文本、玩家昵称、对话等。隶书字体来特殊显示一些标题、武将姓名、称号、重要对话等需要着重美化显示的文字。

开始优化前,我们习惯性地在UWA平台上(www.uwa4d.com)提测了一下,在得到的报告中查看:内存管理>> 具体资源信息 >> 字体资源 这一页。如下图所示,那时候从内存曲线图上看到字体资源占用内存高达12MB。

 

在此先赞一下UWA测评报告,其在定位问题资源时真是高效。报告很明确地指向了两个可以优化的方向:1)内存占用;2)数量峰值。对于数量峰值为2表示每个字体各自有一份冗余资源。

究其原因如下:
1)游戏早期登陆阶段的场景,以及里面用到的贴图、字体等资源往往是不能用AssetBundle进行加载的。而这些贴图和字体等资源如果又在AssetBundle里面有依赖,就会在项目中存在相同的两份;

2)内存占用很好理解,基本上字库的磁盘容量等同于内存占用。


◆◆
优化方案

1. 字库裁切
既然我们接下来要做字体精简的工作,那么针对登陆阶段/游戏阶段的不同应用场景,可以设计不同的裁切字库。最终我们的设计如下图所示:

 

2. 实际操作
裁切字体的工具很多,我们选用的工具是FontSubsetGUI,简单够用。大家只要准备好一个包含你需要字符的txt文件和TTF原文件。运行FontSubsetGUI,选好TTF文件和TXT文件的路径,【Proceed】生成新TTF文件。

 


◆◆◆
效果 & 小结

精简之后在UWA上复测,最终字体占用内存从12MB降低到4.9MB,效果拔群。

 

通过上述的优化操作,笔者得出结论如下:

      1. 针对不同字体的应用场景,设计有效精简的裁切字库。
      2. 需要注意同一个字体资源在AssetBundle内外可能都会有依赖,如果依赖不能避免,那么就要各自设计裁切字库。
posted @ 2022-08-31 15:57  00000000O  阅读(357)  评论(0编辑  收藏  举报