unity打包原理

资源来源有三个途径:
1.Unity自动打包资源 :在Unity场景中直接使用到的资源会随着场景被自动打包到游戏中,这些资源会在场景加载的时候由unity自动加载。这些资源只要放置在Unity工程目录的Assets文件夹下即可,程序不需要关心他们的打包和加载,这也意味着这些资源都是静态加载的
2.Resources : 但在实际的游戏开发中我们一般都是会动态创建GameObject,资源是动态加载的,因此这种资源其实不多。 Resources资源是指在Unity工程的Assets目录下面可以建一个Resources文件夹,在这个文件夹下面放置的所有资源,不论是否被场景用到,都会被打包到游戏中,并且可以通过Resources.Load方法动态加载
3 AssetBundle : AssetBundle资源是指我们可以通过编辑器脚本来将资源打包成多个独立的AssetBundle。AssetBundle的使用很灵活:可以用来做分包发布,渠道要求发布的包限制在100M以内,那只能把一开始玩不到的内容做成增量包,等玩家玩到的时候通过网络下载。AssetBundle 也可以用来做我们下面讨论的自动增量更新, 这些AssetBundle和游戏包是分离的,可以通过WWW类来加载。

AssetBundle
优点 1. 减少安装包的大小   2. 可以用热更新修复你的游戏Bug 3. 甚至代码脚本都可以通过这个方式去热更

压缩方式
1.BuildAssetBundleOptions.None -- 使用LZMA算法压缩,压缩的包更小,但是加载时间更长。使用之前需要整体解压。一旦被解压,这个包会使用LZ4重新压缩。使用资源的时候不需要整体解压。在下载的时候可以使用LZMA算法,一旦它被下载了之后,它会使用LZ4算法保存到本地上。 
2.BuildAssetBundleOptions.UncompressedAssetBundle -- 不压缩,包大,加载快
3.BuildAssetBundleOptions.ChunkBasedCompression -- 使用LZ4压缩,压缩率没有LZMA高,但是我们可以加载指定资源而不用解压全部。
其实自己改下就知道了 大小差异非常大

依赖打包原理
我们先看懂到导出的信息里面有什么

1.CRC:为校验码,通过其检查是否完整
2.AssetFileHash:AssetBundle中所有asset文件的hash,一个单独的hash。只用来做增量build时的检查。
3.TypeTreeHash:ClassTypes 树的哈希值 看是否有新增类型 虽然不知道有啥用
4.ClassTypes: (可以参看unity序列化)
5.Assets 所有在AssetBundle中的asset的名称。

6.Dependencies 所依赖的其它AssetBundle的名字
 

*其实看的出来怎么做更新的了 重启游戏的时候他回去比对每个manifest 如果发现不一样就会去更新这个AssetBuild
*依赖关系也在manifest中 Dependencies中 会写这个AssetBundle加载的时候会去加载那些对应的包(这样就能保证包内的预制体不会异常)

 AssetBundle分组策略总结
1.核心就是处理好不同包之间的互相依赖关系
2.经常更新的资源放在一个单独的包里面,跟不经常更新的包分离

3.把需要同时加载的资源放在一个包里面

4.可以把其他包共享的资源放在一个单独的包里面

5.如果对于一个同一个资源有两个版本,可以考虑通过后缀来区分,例如v1、v2、v3

总结
分组策略其实是非常重要的 如何分组其实有很多种方法
有的是根据特效一类 图标一类 图标一类 依据同类型的 具体怎么划分其实没有最好 

其实这边我觉得可以更具ui模块去分类,这样依赖就不会过多,更新的连锁依赖包就会少很多

小白上路,可能有说错的地方 多多包涵~

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值