前言
Addressables的基础看这篇文章
Addressable全教程
最近公司在写新的框架,决定放弃老的bundle打包方式,使用Addressable,因此我要捋顺新的打包方案,并且解决所有疑问。
正文
打包的最终目的是:build出一堆Bundle文件,而哪些因素会影响出包结果,总结一下有3个关键因素和1个非关键因素
关键因素1:AssetGroups自定义AssetGroup
![addressable 增量打包,项目管理,开发心得,unity,游戏开发,Powered by 金山文档](https://imgs.yssmx.com/Uploads/2023/07/582318-1.png)
关键因素2:BundleMode
![addressable 增量打包,项目管理,开发心得,unity,游戏开发,Powered by 金山文档](https://imgs.yssmx.com/Uploads/2023/07/582318-2.png)
关键因素3: 自定义Label
![addressable 增量打包,项目管理,开发心得,unity,游戏开发,Powered by 金山文档](https://imgs.yssmx.com/Uploads/2023/07/582318-3.png)
一张图就可以看懂这三项如何使用
![addressable 增量打包,项目管理,开发心得,unity,游戏开发,Powered by 金山文档](https://imgs.yssmx.com/Uploads/2023/07/582318-4.png)
![addressable 增量打包,项目管理,开发心得,unity,游戏开发,Powered by 金山文档](https://imgs.yssmx.com/Uploads/2023/07/582318-5.png)
修改该Group的 Bundle Mode
之前是Pack Together,现在修改成Pack Together By Label,执行增量打包
![addressable 增量打包,项目管理,开发心得,unity,游戏开发,Powered by 金山文档](https://imgs.yssmx.com/Uploads/2023/07/582318-6.png)
可以发现老的bundle文件还在,但增加了新的三个bundle文件,根据名字很明显可以看出,all是老的bundle,代表没有Label,而新的bundle根据label分别创建了三个bundle,分别是无label模式,还有两个texture_1 texture_2。
【提问】如果把不同的Group内的资源设置成相同的Label是否会打进同一个bundle,测试发现,不会进入同一个bundle
![addressable 增量打包,项目管理,开发心得,unity,游戏开发,Powered by 金山文档](https://imgs.yssmx.com/Uploads/2023/07/582318-7.png)
![addressable 增量打包,项目管理,开发心得,unity,游戏开发,Powered by 金山文档](https://imgs.yssmx.com/Uploads/2023/07/582318-8.png)
非关键因素1:Group的一项设置> Content Update Restriction
为何前三项是关键因素,而这一项是非关键因素?
答:该选项在首次打包前就要确定好要选择哪个,以后增量打包不能变,变了会出错(除非是完整出包),所以说包的内容在不断变化,但该选项不能变。热更资源就选动态资源或不勾选Prevent Updates,用默认选项。如果是极少热更的资源可以设置为静态。
老版本的Addressable有两个选项
Cannot Change Post Release:静态资源
Can Change Post Release:动态资源
![addressable 增量打包,项目管理,开发心得,unity,游戏开发,Powered by 金山文档](https://imgs.yssmx.com/Uploads/2023/07/582318-9.png)
新版本
![addressable 增量打包,项目管理,开发心得,unity,游戏开发,Powered by 金山文档](https://imgs.yssmx.com/Uploads/2023/07/582318-10.png)
Prevent Updates是否阻止更新
请注意!!!
无论是新版本还是老版本,首次打包一定要确定好这个Group的Content Update Restriction选项并且在以后的版本中不允许更改,除非以后要再次完整的打包才可以更改。下面做个测试,看看Content Update Restriction到底有什么用
默认情况下是不勾选Prevent Updates或Can Change Post Release:动态资源
如果勾选了Prevent Updates或者是使用了Cannot Change Post Release:静态资源,资源发生改变并且执行增量打包时,你会看到Addressables Groups界面各种黄灯警告
![addressable 增量打包,项目管理,开发心得,unity,游戏开发,Powered by 金山文档](https://imgs.yssmx.com/Uploads/2023/07/582318-11.png)
Unity会提示你需要把改变的资源移动到一个新的Group中,并且你可以自己定义该Group的名字
![addressable 增量打包,项目管理,开发心得,unity,游戏开发,Powered by 金山文档](https://imgs.yssmx.com/Uploads/2023/07/582318-12.png)
当你点击ApplyChanges后,被警告的资源就会跑到这个新的Group中,如下图所示。
![addressable 增量打包,项目管理,开发心得,unity,游戏开发,Powered by 金山文档](https://imgs.yssmx.com/Uploads/2023/07/582318-13.png)
官方建议我们把项目中不常改动的资源设置为静态资源
打包粒度控制
接下来要考虑的问题是,Bundle的粒度要如何控制,假设我把所有资源放到一个Group中,那一个微小的改动就要下载整个bundle包,这肯定是不科学的。
那可否让每一个资源独立成一个Bundle,虽然这么做可行,但是考虑到效率也是不建议这么做的。颗粒度过小要考虑到IO发烫的问题。
有了上面两个疑问,那解决方案就比较清晰了,方案是:有的资源独立一个bundle,有的资源按文件夹打成一个bundle。被多个资源引用的公共资源,按文件夹打成一个bundle或每个资源独立一个bundle。
疑问:哪些资源需要按文件夹打包,哪些资源要独立一个bundle?
先来看看所有要打包的东西有哪些:
Atlas、Sprite、Lua脚本、Shader、Setting(Unity序列化Asset)、txt配表或者bytes配表数据、视频、音频、字体、预设(3D角色、特效、2DSpine、Live2D)
打包资源就是上述文件,而怎么区分用哪种策略呢
类型 |
是否依赖其他文件 |
以文件/文件夹打包 |
纯被动依赖 |
引用文件 |
Atlas |
✅ |
文件 |
✅ |
|
Sprite文章来源:https://www.toymoban.com/news/detail-582318.html |
否文章来源地址https://www.toymoban.com/news/detail-582318.html |
|||
到了这里,关于[游戏开发]Unity Addressable打包策略的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!