Unity性能优化之字体裁剪

Unity优化中,字体大小优化是非常重要的一项。
一个包含常用汉字的ttf字库,一般在10MB以上。
直接放到安装包中的话,会造成极大地浪费。

裁剪

裁剪主要是针对ttf体做个筛选,从庞大的字库中,拣选部分我们需要的文字,然后生成一个较小的字体库。

工具方面,可以选择网上很多人推荐FontSubsetGUI和FontPruner,这个前辈写了比较详细的操作流程,两款软件各有利弊吧。也有前辈对FontSubsetGUI的字体裁剪结果提出了质疑关于字体剥离和精简工具 FontSubsetGUI 和 FontPruner 的比较。

这里我推荐一款fontsmaller,这个才是真正的极简,不用安装什么环境,操作界面都没有,双击打开,选中TTF,输入要裁剪的文本就完事了。裁剪出来的大小也比较理想。

一般情况下,这三款裁剪出来的大小差距不大,我们选取3000常用字,裁剪字体后,字体一般在4-5M。(参与过的某个项目在国外运营,只要求英文环境,也就是只需要unicode字符,裁剪后只有40Kb左右)

NGUI字体剥离(很少用)

某些项目使用的是打包方式是强制引用(BuildAssetBundleOptions.CompleteAssets),这导致多个Bundle包引用的字体被强制拉到各个Bundle中,造成大量的“冗”。(字体资源十分特殊,极易被多个Bundle引用)。
为了解决这个问题,又不造成大量的代码修改。打包时可以将每个UILabel引用的UIFont名称记录(记录到预制体上,方便复原),然后的UILabel.bitmapFont全部置为null(丢失引用后,就不打包),最后将所有引用到的字体统一存放的一个公共位置,(比如CommonModel之类的地方建一个公共字体库)。
具体界面加载时,再将字体通过名字在公共字体库中进行“查表”复原,如此便可去掉每个界面的字体“冗”

字体异常丢失问题(应急手段)

字体折腾来折腾去,打包出去发现全没了,短时间又找不到原因怎么办(把自己坑吐血)。

打包前执行下这个方法,将所有的字体全部改为动态字库。

bb is weak show u code

private static void SetFontDependence(bool contain)
    {
        var Fonts = AssetDatabase.FindAssets("t:Font");
        int count = Fonts.Length;
        for (int i = 0; i < count; ++i)
        {
            var path = AssetDatabase.GUIDToAssetPath(Fonts[i]);
            var font = AssetImporter.GetAtPath(path) as TrueTypeFontImporter;
            if (font != null)
            {
                font.includeFontData = contain;
            }
        }
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }

关键代码是
font.includeFontData = true。具体请参考http://www.manew.com/youxizz/2926.html

If this is enabled, the actual font will be embedded into the asset for Dynamic fonts.
如果这个被启用,实际字体将嵌入到资源中,用于动态字体。
When you disable this, the user must have the font installed in his system to use it.
当这个禁用,用户必须在他的系统安装这个字体。

### 回答1: Unity 字体和菜单资源是在Unity开发环境中用于设计和创建游戏用户界面的重要组成部分。 首先,Unity 字体资源可以让开发人员选择合适的字体样式和大小,以增强游戏的可读性和视觉效果。Unity提供了许多常用字体,如Arial、Times New Roman等,也支持导入自定义字体文件。通过字体资源,开发人员可以轻松地在游戏中创建和调整文本对象,例如标题、按钮、对话框等。此外,Unity 还提供了许多文本设置选项,如字体颜色、字间距、行间距等,以满足不同游戏风格和需求。 其次,Unity 菜单资源是为了方便开发人员管理和组织游戏项目中的各种资源而设计的。在Unity编辑器中,菜单资源是以层次结构的形式展示的,包含了游戏场景、预设、材质、纹理等等。通过菜单资源,开发人员可以轻松地创建、修改和删除游戏中的各种资源,也可以进行资源间的关联和引用。此外,Unity还提供了图片预览和搜索功能,以便快速查找和使用所需的资源。通过合理组织和利用菜单资源,开发人员可以更高效地管理游戏项目,提高开发效率和游戏品质。 总之,Unity 字体和菜单资源是为了方便开发人员在游戏中创建和管理用户界面以及各种资源而设计的。通过使用字体资源,开发人员可以增强游戏的可读性和视觉效果。而菜单资源则可以帮助开发人员更好地组织和管理游戏项目中的各种资源,提高开发效率和游戏品质。 ### 回答2: Unity 字体和菜单资源是 Unity 引擎中的两个重要的功能。字体资源用于在游戏中显示文本和字体样式的设置,而菜单资源用于创建游戏的菜单系统和交互界面。 首先,Unity 字体资源允许开发者在游戏中使用自定义字体字体样式。Unity 内置了一些常用的字体样式,同时也支持导入多种格式的自定义字体。通过使用字体资源,开发者可以定制游戏中的文字外观,如字体大小、字体颜色、加粗、斜体等。这使得游戏界面在视觉上更加丰富和个性化。 其次,Unity 菜单资源是开发者在游戏中创建互动界面的关键。通过使用 Unity 的菜单资源,开发者可以轻松地构建游戏菜单系统,包括开始菜单、选项菜单、关卡选择菜单等。菜单资源也可以用于创建与玩家交互的界面元素,如按钮、滑块、进度条等。这些菜单资源可以与代码进行交互,实现玩家与游戏的互动和反馈。 除了以上功能,Unity 还提供了一些菜单资源的扩展和工具,用于更高级的菜单设计和界面布局。开发者可以使用 Unity 的可视化编辑器来快速设计和调整菜单界面,同时也可以使用 Unity 提供的脚本 API 对菜单进行进一步的自定义和控制。 综上所述,Unity 字体和菜单资源是 Unity 引擎中的两个重要功能,分别用于游戏中文本显示和界面交互。它们给开发者提供了丰富的定制化选项和工具,使得游戏界面更加华丽和用户友好。 ### 回答3: Unity是一款强大的游戏开发引擎,它提供了丰富的资源供开发者使用。其中,字体和菜单资源是开发过程中常用的资源之一。 在Unity中,字体资源用于显示游戏中的文本内容。Unity支持不同的字体格式,如TrueType字体和OpenType字体等。开发者可以从外部导入自定义的字体文件,也可以使用Unity自带的字体资源。通过将字体资源应用于文本组件,开发者可以控制字体的样式、颜色、大小等属性,从而实现游戏界面的美化与个性化。 菜单资源则用于创建游戏的用户界面(UI),包括各种按钮、标签、滑块等交互元素。Unity提供了丰富的菜单资源供开发者使用,可以直接拖拽到场景中进行布局和调整。开发者可以通过编辑器来设置菜单资源的样式、位置、大小以及交互响应等属性,从而实现用户界面的设计和交互功能。 通过使用Unity提供的字体和菜单资源,开发者能够更加方便地创建游戏中的文本和界面元素。同时,Unity还提供了一系列的脚本组件和API,使得开发者能够根据游戏需求自定义字体和菜单资源的行为。这些资源的使用不仅能够提升游戏的视觉效果,也能够提高用户对游戏的体验和操作便利性。 总而言之,Unity字体和菜单资源是开发游戏过程中不可或缺的资源之一,通过它们的灵活运用,可以使游戏更加个性化和用户友好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值