AB增量打包问题
两次打包,文件均未有改动,但是bundle的内容会有变化,用解包工具看,感觉是里面包含的脚本的内容有差异。manifest文件显示CRC和AssetFileHash有变化。 Bundle.zip 第一次打包为彻底打包,第二次为增量打包。
彻底打包流程如下: 1、Revert资源 2、Clear所有资源的BundleName 3、按照规则全部设置一遍BundleName 4、使用指令BuildPipeline.BuildAssetBundles(outputPath, abBuilds, BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget);进行打包 5、生成文件对应BundleName的映射表
增量打包流程如下: 1、Revert资源 2、Clear所有资源的BundleName 3、按照映射表设置资源BundleName 4、按照规则将其余资源设置BundleName 5、使用指令BuildPipeline.BuildAssetBundles(outputPath, abBuilds, BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget);进行打包 5、生成文件对应BundleName的映射表
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
继承Mono的脚本挂在GameObject上,修改脚本后,再次打包,AssetBundle变化。这个我们也遇见了,现在都尽量不继承Mono了。如果用了宏的,切换到不同宏下,打包的AssetBundle也是会变。总之一句话,Mono变化了,且挂在GameObject上,会引起打包的AssetBundle变化。如果真的要挂Mono,可以动态挂载上去。
多谢哈,第一个问题知道了,第二个问题我想到的就是reimport all了
说一下第一个问题:Addressable是支持增量加载的。Addressable进行远程加载的时候是使用的UnityWebRequestAssetBundle.GetAssetBundle(url)来下载AssetBundle,在UnityWebRequestAssetBundle是内部支持Caching的,所以当你的AssetBundle已经下载到本地进行缓存过,UnityWebRequestAssetBundle在、再加载同一个AssetBundle的时候就自动从本地进行加载了,具体情况可以查看官方文档。
预先下载的思路大致如下:
在Addressable Settings里面将Disable Catalog Update on Startup勾选上,这样就可以在第一次更新的时候手动判断远程的Catalog是否有更新。如果获取到远程的Catalong有更新之后,再根据刚刚更新的Catalog来下载AssetBundle了。推荐一下黄程大神写的文章,Addressable系统解析及实践经验
上面的代码在Unity编辑器里面跑的时候,那个percentage会各种诡异,有时候会在某一个百分比停留N多时间,不知道是不是Addressable的bug。没有试过在真机上跑,所以不确定是不是编辑器独有的问题。
问题找到了,主要是我们打包之前,还对UI的Prefab做了一次预处理,会为某些控件增加脚本组件,由于这个修改后的prefab是不上传的,每次这个操作都会去做,并且每次增加的脚本组件分配的FileId不同,导致每次文件都会有差异。这块检查时疏忽了。
另外,和Unity官方确认过了,Unity5.X以后,BuildAssetBundleOptions.DeterministicAssetBundle是默认选项,不需要特意在去加了
感谢您的解答,不过还不是我遇到的这个问题,我是Mono的脚本并没有任何修改,所以很疑惑
没修改都会变化啊,用这个试试 BuildAssetBundleOptions.ChunkBasedCompression| BuildAssetBundleOptions.DeterministicAssetBundle
说出来你可能不信
Library
既然每次都会做预处理,那具体的解决方法是什么呢,能不能说下,我现在也有这个烦恼,MD5老是变