首页 > 其他分享 >游戏包体的缩减

游戏包体的缩减

时间:2023-02-14 01:11:18浏览次数:53  
标签:裁剪 游戏 可以 TreeSize 字体库 包体 缩减 资源

背景

随着业务的迭代,我们的游戏包体也会随之变得臃肿庞大。包体的大小往往影响着我们的游戏下载的转化率,特别是在全球化的大环境下,新兴市场中大约 70% 的用户会在下载前考虑 app 的大小(来源Google报告)。游戏包体的大小直接关系到了游戏厂商推广渠道的成本问题。

定位问题

工具

  • 推荐TreeSize。下载并解压我们打好的android包,右键通过TreeSize分析。TreeSize可以通过不同形态的UI显示,快速定位到当前内存占用较大的模块。
  • UPR工具。通过集成UPR工具生成报告,我们可以通过内存快照截图,反推查看对应的资源是否符合预期来进行资源的调整,从而减小包体大小。

分析问题

  • 资源
    资源一般都是包体过大的罪魁祸首。Apk解压后的目录下,Assets/Android一般存放的都是我们的资源文件。通过TreeSize对文件的分析,我们可以大概得到我们占比比较重的几个模块,然后针对这些模块进行拆分分析,解决我们的问题。

    下面列举几个常见的资源问题:

    • 冗余资源。包括但不限于视频资源、测试图片资源、demo场景资源、冗余预制体等,删除这些多余的资源(写一个反查找引用的工具进行检查会更稳健一些)
    • 字体库种类过多。UI在设计界面的时候,往往会引入很多使用率很低的字体库,可以通过跟UI协商,确定一至三个的字体,避免字体库的冗余。大一些的字体库在10M左右,如果能节省下来是比较可观的。平衡动态字体和静态字体,一般选用一种方式即可。
    • Shader变体过多。可以通过修改Shader字段,减少Shader变体数量。Unity优化着色器变体
    • 针对小图进行图集的生成。对长宽都在512以下的图片,进行图集的处理(需要平衡渲染的需求,不要导致DrawCal过分升高影响性能)。
      • 注意:小图在合成图集的时候,可以将没有带Alpha通道的图合成一张图集,然后使用不带Alpha通道的压缩格式去压缩,能更大程度的压缩图片大小
    • 修复图片长宽,使其为4的倍数。我们知道ETC2或者ASTC压缩格式,必须要求图片的长宽均为4的倍数才可以。可以通过编写工具方式来进行查找并修改,这边有个python工具的传送门可以参考一下。
  • 代码和配置
    处理完资源,我们会发现lib这个文件夹也占了挺大的比例的。lib文件夹里面存放的就是我们的C#代码,通过IL2CPP生成的SO文件啦。

    • 构建release包,可以更准确的判断lib库的大小。Debug包附带了Debug代码逻辑,会使得so变大
    • 开启代码裁剪。开启BuildSetting下的Strip Engine Code,调整裁剪的尺度(跟你的C#代码有关,裁剪过大会使得一些反射调用的逻辑出错,越高级别的裁剪需要测试验证)。如果裁剪粒度不适合可以调整裁剪粒度,或者通过添加裁剪过滤清单进行添加。
    • 删除无用的表格配置
    • 删除无用的协议(protobuff或者Json等)

总结

通过对资源和代码的处理,我们可以对包体的大小进一步的控制。但是非常重要的一点是:我们在这个过程中,可以沉淀一些标准的美术规范或者程序编码规范,构建稳定的资源管线,对后续的包体大小控制,才是一个长远的对策!

标签:裁剪,游戏,可以,TreeSize,字体库,包体,缩减,资源
From: https://www.cnblogs.com/fzuljz/p/16871739.html

相关文章

  • 实现自有App上架小游戏其实并非难事
    近年来小程序游戏迎来了爆发式增长。微信、支付宝、抖音等各大平台小程序游戏愈加丰富,你是否也让自己的App也拥有运行丰富的小游戏的能力?今天就来带大家看看如何实现。我......
  • 如何把游戏进行打包
    安装三方库pipinstallpyinstaller安装pyinstaller-F-w​​game.py​​......
  • 记一次 .NET 某游戏网站 CPU爆高分析
    一:背景1.讲故事这段时间经常有朋友微信上问我这个真实案例分析连载怎么不往下续了,关注我的朋友应该知道,我近二个月在研究SQLSERVER,也写了十多篇文章,为什么要研究这东西......
  • "AI+"的畅想:AI+游戏
    23年以后,市场活力的引擎将由互联网+快速切换到Ai+,各行各业的Ai+可以大幅度提升人类的工作产出能力.现在的游戏还是太程式化了,就算是以随机性著称的rogue类游戏也不过是......
  • Python飞机大战游戏
    #导入模块顺序:官方标准模块、第三方模块、应用程序模块importrandomimportpygameSCREEN_RECT=pygame.Rect(0,0,480,700)FRAME_PER_SEC=60CREATE_ENEMY_EV......
  • 【mac游戏】打造世界
    原文来源于黑果魏叔官网,转载需注明出处。CrafttheWorld结合了沙盒游戏、策略和上帝模拟器最有趣的功能。探索由危险生物居住的随机生成的世界,建造一个可靠的堡垒,收集各种......
  • 扫描游戏
    问题描述有一根围绕原点 �O 顺时针旋转的棒 ��OA,初始时指向正上方(Y轴正向)。在平面中有若干物件,第 �i 个物件的坐标为 (��,��)(xi​,yi​),价值为 ��zi​ 。当棒扫......
  • 收购、被收购、卸任,古永锵经历的行业剧变与权力游戏
    创办优酷十一年,经历了中国在线视频行业从无到繁盛的曲折,古永锵一次次解开难题,但最终,这位视频行业的元老却没能掌控自己的命运。10月31日,阿里巴巴集团CEO张勇通过内......
  • 蜗牛式学习Java--基础篇(2)--综合案例拼图游戏
      创建窗体代码:packagecom.ktestdemo;importjavax.swing.*;//继承JFramepublicclassPictureFrameextendsJFrame{//定义构造方法public......
  • 游戏类C程序设计
    1迷宫游戏1.1MAZE1.0#include<iostream>usingnamespacestd;intmain(){intx=1,y=2,mx=10,my=9;charch;cout<<"ready!\n";while(true)......