[游戏开发]Unity Addressable打包策略

前言

Addressables的基础看这篇文章

Addressable全教程

最近公司在写新的框架,决定放弃老的bundle打包方式,使用Addressable,因此我要捋顺新的打包方案,并且解决所有疑问。

正文

打包的最终目的是:build出一堆Bundle文件,而哪些因素会影响出包结果,总结一下有3个关键因素和1个非关键因素

关键因素1:AssetGroups自定义AssetGroup

[游戏开发]Unity Addressable打包策略_第1张图片

关键因素2:BundleMode

[游戏开发]Unity Addressable打包策略_第2张图片

关键因素3: 自定义Label

[游戏开发]Unity Addressable打包策略_第3张图片

一张图就可以看懂这三项如何使用

[游戏开发]Unity Addressable打包策略_第4张图片

[游戏开发]Unity Addressable打包策略_第5张图片

修改该Group的 Bundle Mode

之前是Pack Together,现在修改成Pack Together By Label,执行增量打包

[游戏开发]Unity Addressable打包策略_第6张图片

可以发现老的bundle文件还在,但增加了新的三个bundle文件,根据名字很明显可以看出,all是老的bundle,代表没有Label,而新的bundle根据label分别创建了三个bundle,分别是无label模式,还有两个texture_1 texture_2。


【提问】如果把不同的Group内的资源设置成相同的Label是否会打进同一个bundle,测试发现,不会进入同一个bundle

[游戏开发]Unity Addressable打包策略_第7张图片
[游戏开发]Unity Addressable打包策略_第8张图片

非关键因素1:Group的一项设置> Content Update Restriction

为何前三项是关键因素,而这一项是非关键因素?

答:该选项在首次打包前就要确定好要选择哪个,以后增量打包不能变,变了会出错(除非是完整出包),所以说包的内容在不断变化,但该选项不能变。热更资源就选动态资源或不勾选Prevent Updates,用默认选项。如果是极少热更的资源可以设置为静态。

老版本的Addressable有两个选项

Cannot Change Post Release:静态资源

Can Change Post Release:动态资源

新版本

Prevent Updates是否阻止更新

请注意!!!

无论是新版本还是老版本,首次打包一定要确定好这个Group的Content Update Restriction选项并且在以后的版本中不允许更改,除非以后要再次完整的打包才可以更改。下面做个测试,看看Content Update Restriction到底有什么用

默认情况下是不勾选Prevent Updates或Can Change Post Release:动态资源

如果勾选了Prevent Updates或者是使用了Cannot Change Post Release:静态资源,资源发生改变并且执行增量打包时,你会看到Addressables Groups界面各种黄灯警告

[游戏开发]Unity Addressable打包策略_第9张图片

Unity会提示你需要把改变的资源移动到一个新的Group中,并且你可以自己定义该Group的名字

[游戏开发]Unity Addressable打包策略_第10张图片

当你点击ApplyChanges后,被警告的资源就会跑到这个新的Group中,如下图所示。

[游戏开发]Unity Addressable打包策略_第11张图片

官方建议我们把项目中不常改动的资源设置为静态资源


打包粒度控制

接下来要考虑的问题是,Bundle的粒度要如何控制,假设我把所有资源放到一个Group中,那一个微小的改动就要下载整个bundle包,这肯定是不科学的。

那可否让每一个资源独立成一个Bundle,虽然这么做可行,但是考虑到效率也是不建议这么做的。颗粒度过小要考虑到IO发烫的问题。

有了上面两个疑问,那解决方案就比较清晰了,方案是:有的资源独立一个bundle,有的资源按文件夹打成一个bundle。被多个资源引用的公共资源,按文件夹打成一个bundle或每个资源独立一个bundle。

疑问:哪些资源需要按文件夹打包,哪些资源要独立一个bundle?

先来看看所有要打包的东西有哪些:

Atlas、Sprite、Lua脚本、Shader、Setting(Unity序列化Asset)、txt配表或者bytes配表数据、视频、音频、字体、预设(3D角色、特效、2DSpine、Live2D)

打包资源就是上述文件,而怎么区分用哪种策略呢

类型

是否依赖其他文件

以文件/文件夹打包

纯被动依赖

引用文件

Atlas

文件

Sprite

你可能感兴趣的:(项目管理,开发心得,unity,游戏开发)