loadbundle为什么不能持久保存?急,求助。

assetManager.loadBundle(BundleName, (err, bundle) => {

        if (err) {

            assetManager.loadBundle(remoteBundleName, (err, bundle) => {

                这里输出加载成功,可以调用bundle.load  实现加载对象

            })

        } else {

            bundle.load('prefabs/xx', (err, prefab) => {

                这里输出加载成功,可以调用  实现加载对象

            })

        }

    });  问题真机每次重启  都走的的远程加载 。当是api文档 写的是可以持久保存的。cocos版本3.8.6

看Creator\3.8.7\resources\resources\3d\engine\bin\adapter\native\engine-adapter.js的源码

看了,ai说加__cacheBundleRoot__: bundleName,但是好像没用,还是不能缓存包

源码太多,我也不想看,我也问了ai。我提供几个排查方向:1.用cacheManager的接口看看是不是load后一定有缓存。2.硬盘上相对应的位置是不是存在本地分包文件。3.load接口是不是默认会强制重新加载。4.load接口的版本号要不要处理。5.重启后cacheManager能不能根据url获取到本地存储的文件信息。着重看1 2 5点。如果还是不行,最坏情况可以手动实现一个下载解析器。

理论上一定是有缓存的,cocos根据url加载,根据url创建缓存key,我记得在web上都能复现(有缓存)的情况,因此一般会加一个时间戳不用缓存,会影响热更。

另外使用loadRemote不用loadBundle试试,具体还是得看源码…。 :smiley:

我调试可以看到缓存信息,都是远程的,但是好像远程包必须要先远程加载,然后才能使用getbundle,直接loadbundle本地根本加载不了,cocos是缓存机制是不是内置包才有loadbundle,远程包就算有缓存也需要是远程地址加载包。

你是要做远程Bundle热更吗 Bundle构建之后生成资源清单 自己通过网络下载方式存储本地 不是通过loadBundle混存吧

远程加载都是有缓存的,每次使用时都需要远程加载一次,即使有缓存。unity好像封装的是通用方法,底层会从清单自动获取包,而cocos的loadbundle似乎只能加载本地内置包,要么就使用远程加载,有区分