UnityAssetsBundle字体优化解决方案

Unity开发某个项目,打包后的apk包体已经高达1.25G了,这是非常离谱的。为了不影响用户体验,需要将apk包体缩小。因为项目本身不包含很多模型以及其他大型资源,排除法将AB包删除,发现app本身就100多M。

由此可以锁定是AB包的问题,上网上使用了UWA(Unity性能分析工具)去分析了下AssetsBundle包的冗余。

什么是UWA

UWA地址

UWA | 致力于游戏VR和AR应用提供项目研发解决方案 | 简单优化、优化简单 | 侑虎科技

UWA是一个专门为Unity游戏开发提供的性能分析和优化工具平台。它能够实时监控游戏性能数据,包括内存使用、CPU占用、帧率和DrawCall等关键指标,同时可以自动扫描项目中的性能隐患,提供具体的优化方案和建议。这个工具易于集成到Unity项目中,支持多平台开发,并提供可视化的数据分析界面,是Unity开发者进行性能优化的实用工具。

发现基本上每个Panel都会引用4-5种字体冗余。这显然是问题所在。

AssetBundle资源冗余的原因

  1. 依赖引用
    • 不同的AB包引用了相同的资源
    • 比如AB包A和AB包B都需要使用同一个字体
    • 在打包时这个字体会被重复打包到两个AB中
  1. 重复打包情况
    • 直接依赖:资源被直接放入多个AB包中
    • 间接依赖:资源作为其他资源的依赖项被重复打包
    • 共享资源未单独打包:多个AB包共同依赖的资源未抽取出来

解决方案

我去看了下目前项目里引用的字体大小。每个字体文件过大,有的TTF或OTF都快20MB了。

使用字体裁切技术来优化字体文件大小。通过提取项目中实际使用的文字(如"登录"、"商城"等),剔除未使用的字符,显著减小原TTF字体文件的体积。

使用fontsmaller进行裁切。

FontSmaller 字体文件子集化工具

FontSmaller 字体文件子集化工具是一个免费的程序,它可以帮助用户从一个字体文件中抽出部分字符,再组成精减的字体文件,主要用于网页设计等。

主要优势:更易操作,无需安装。相较于其他在线版工具,其不受子集字符数量限制。

简单点的做法就是下载一个常用字库,比如常用3000字库,然后导入进去进行裁切。

优化后的字体文件,非常清爽了。

再次打AB包,发现AB包缩小到200M左右。非常Nice!

原来的大小

精简后的大小

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/909492.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高通Quick板上安装编译Ros1 noetic,LeGO_LOAM,FAR_Planner和rslidar_sdk

环境要求: 这里quick板上安装的是Ubuntu20.04版本 Ros Noeti安装: 1.设置软件源: 官方提供的软件源: sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.…

Qt多边形填充/不填充绘制

1 填充多边形绘制形式 void GraphicsPolygonItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {Q_UNUSED(option);Q_UNUSED(widget);//painter->setPen(pen()); // 设置默认画笔//painter->setBrush(brush()); // 设置默…

零基础学习Spring AI Java AI使用向量数据库postgresql 检索增强生成 RAG

零基础学习Spring AI Java AI使用向量数据库postgresql 检索增强生成 RAG 向量数据库是一种特殊类型的数据库,在人工智能应用中发挥着至关重要的作用。 在向量数据库中,查询与传统的关系数据库不同。它们不是进行精确匹配,而是执行相似性搜…

如何在 uniapp 中实现图形验证码

全篇大概2000 字(含代码),建议阅读时间10分钟。 什么是图形验证码? 图形验证码(也称为图片验证码或验证码图像)通常用于防止机器人自动提交表单,确保用户是人工操作。 一、需求 我们希望在一个…

mysql error:1449权限问题 及 用户授权

一、权限问题 Got error: 1449: The user specified as a definer (skip-grants userskip-grants host) does not exist when using LOCK TABLES 在迁移数据库时,定义的definer,在两个数据库之间不同步时,要将不存在的definer改成数据库中已…

uniapp+vue加油服务系统 微信小程序

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 基于微信小程序的加油服务系统设计为微信小程序和后台管理两个服务端,并对此设计相应的功能模块如下&#x…

【MFC编程(一)】MFC概述

文章目录 MFC概述MFC组成MFC对比Windows APIMFC类库基类CObject命令发送类CCmdTarget应用程序结构类应用程序线程支持类CWinThread/CWinApp文档类CDocument文档模板类CDocTemplate 窗口类窗口基类CWnd边框窗口类CFrameWnd视图类CView MFC概述 MFC(Microsoft Founda…

如何解决传统能源企业后备人才不足、人才规划缺失问题

如何解决传统能源企业后备人才不足、人才规划缺失问题 很多传统能源企业都面临着老员工逐渐退休,新员工还没有培养起来的问题,缺乏提前对人力资源规划的意识,导致当企业要开展新业务时或者老员工离职的时候,缺乏合适的人选。特别…

服装品牌零售业态融合中的创新发展:以开源 AI 智能名片 S2B2C 商城小程序为视角

摘要:本文以服装品牌零售业态融合为背景,探讨信息流优化和资金流创新的重要作用,并结合开源 AI 智能名片 S2B2C 商城小程序,分析其如何进一步推动服装品牌在零售领域的发展,提高运营效率和用户体验,实现商业…

C#编程:VSTO在Excel工作表中输出List数据

标题 C#编程&#xff1a;VSTO在Excel工作表中输出List数据 正文 一、问题&#xff1a; 我想把C#中的List<T>输出到Excel工作表中 二、思路方法&#xff1a; &#xff08;1&#xff09;用程序创建一个List<T> &#xff08;2&#xff09;输出到当前工作表 三、代码&a…

【算法】递归+深搜:106.从中序与后序遍历序列构造二叉树(medium)

目录 1、题目链接 相似题目&#xff1a; 2、题目 3、解法 函数头-----找出重复子问题 函数体---解决子问题 4、代码 1、题目链接 106.从中序与后序遍历序列构造二叉树&#xff08;LeetCode&#xff09; 相似题目&#xff1a; 105.从前序与中序遍历序列构造二叉树 889.根…

【Postman深入测试接口的详细指南】保姆级

Postman深入测试接口的详细操作步骤 一、创建测试集合二、使用环境变量三、编写请求四、编写测试脚本五、数据驱动测试六、模拟请求&#xff08;Mocking&#xff09;1. 创建Mock Server2. 定义响应3. 使用Mock Server进行请求 七、API监控1. 创建监控2. 运行监控 一、创建测试集…

Memento 备忘录模式

备忘录模式 意图结构适用性实例Java Web开发中的简单示例Originator 类Memento 类Caretaker 类 文本编辑器示例1. Originator (发起人) - TextEditor2. Memento (备忘录) - TextMemento3. Caretaker (负责人) - History4. 使用示例输出 备忘录模式&#xff08;Memento Pattern&…

HTMLCSS:3D 旋转卡片的炫酷动画

效果演示 这段代码是一个HTML和CSS的组合&#xff0c;用于创建一个具有3D效果的动画卡片。 HTML <div class"obj"><div class"objchild"><span class"inn6"><h3 class"text">我是谁&#xff1f;我在那<…

为什么越来越多人开始用云电脑?网友道出了真相

近期&#xff0c;3A游戏大作《黑神话&#xff1a;悟空》的横空出世&#xff0c;成功激起大多数人对国产游戏的兴趣。然而&#xff0c;没有一台高配置的电脑&#xff0c;就无法在《黑神话&#xff1a;悟空》中获得震撼的游戏体验。想要配齐处理器、显卡、内存等硬件&#xff0c;…

https服务器访问http资源报Mixed Content混合内容错误

1 报错内容 Mixed Content: The page at ‘https://xxx’ was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint ‘http://xxx’. This request has been blocked; the content must be served over HTTPS. 2 报错原因 页面通过 HTTPS 加载&#xff…

vue3项目中实现el-table分批渲染表格

开篇 因最近工作中遇到了无分页情景下页面因大数据量卡顿的问题&#xff0c;在分别考虑并尝试了懒加载、虚拟滚动、分批渲染等各个方法后&#xff0c;最后决定使用分批渲染来解决该问题。 代码实现 表格代码 <el-table :data"currTableData"borderstyle"wi…

多模态PaliGemma——Google推出的基于SigLIP和Gemma的视觉语言模型

前言 本文怎么来的呢&#xff1f;其实很简单&#xff0c;源于上一篇文章《π0——用于通用机器人控制的流匹配VLA模型&#xff1a;一套框架控制7种机械臂(改造了PaliGemma和ACT的3B模型)》中的π0用到了PaliGemma 故本文便来解读下这个PaliGemma 第一部分 PaliGemma 1.1 Pal…

基于vue框架的的楼盘销售管理系统6n60a(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 用户,房源类型,员工,房源信息,购房预订,购房合同 开题报告内容 基于Vue框架的楼盘销售管理系统开题报告 一、研究背景 随着房地产市场的蓬勃发展&#xff0c;楼盘销售行业的竞争日益激烈。传统的销售管理方式依赖于人工记录和纸质文档&#xff0c;效率低下…

DevOps开发运维简述

DevOps平台是一套集成的解决方案&#xff0c;旨在协调软件开发&#xff08;Development&#xff09;和信息技术运维&#xff08;Operations&#xff09;。它促进跨功能团队合作&#xff0c;实现自动化流程&#xff0c;确保持续集成与持续交付&#xff08;CI/CD&#xff09;。 一…