博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何精简Unity中使用的字体文件
阅读量:7168 次
发布时间:2019-06-29

本文共 1153 字,大约阅读时间需要 3 分钟。

在游戏开发过程中,为了UI界面美观和显示效果一致性的考虑,大部分游戏都会使用动态字体来表现文字。尤其在这个看脸的时代,一种字体已经无法满足UI同学对美观的需求,因此我们常常发现若干个小则两三兆,大则十几兆的字体文件,这些文件既占包体又占内存。因此,对字体的合理使用和优化已经成为项目中后期优化必不可少的一个步骤。这里介绍《极无双》团队对于字体裁切的思路和方法。

这是侑虎科技第176篇原创文章,感谢作者王亮供稿。欢迎转发分享,未经作者授权请勿转载。作者QQ:10096986。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。(QQ群465082844)

同时,作者也是U Sparkle活动参与者哦,UWA欢迎更多开发朋友加入 ,这个舞台有你更精彩!


◆◆

问题描述

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

开始优化前,我们习惯性地在UWA平台上()提测了一下,在得到的报告中查看:内存管理>> 具体资源信息 >> 字体资源 这一页。如下图所示,那时候从内存曲线图上看到字体资源占用内存高达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内外可能都会有依赖,如果依赖不能避免,那么就要各自设计裁切字库。

转载于:https://www.cnblogs.com/lancidie/p/6285569.html

你可能感兴趣的文章
jQuery操作cookie
查看>>
11-03笔记图
查看>>
时间戳解读
查看>>
width为auto或者100%的区别
查看>>
《贝多芬传》译者序
查看>>
node.js的koa@2性能测试
查看>>
matlab函数_连通区域
查看>>
伪元素选择器
查看>>
Java过滤敏感词
查看>>
java多线程导入excel(poi)
查看>>
UML类间关系
查看>>
Python自学笔记-sorted()函数(来自廖雪峰的官网Python3)
查看>>
如何从零安装Mysql
查看>>
设计模式:命令模式
查看>>
react文档demo实现输入展示搜索结果列表
查看>>
货代英语--------澳大利亚包装声明
查看>>
UINavigationController和UIBarButtonItem的例子
查看>>
有关UnrealEngine材质编辑器中的Custom节点的一些小贴士
查看>>
flask 的管理模块的功能add_template_global、send_from_directory
查看>>
NOIP 2018 普及组 解题报告
查看>>