怎么判断子包是否存在?

Read json failed: path: assets/tank/cc.config.json message: Parse json failed!

如上tank的包用如下代码判断:

   return new Promise((reovle, reject) => {
           assetManager.loadBundle(bundleName, async (err, bundle) => {
               if (err) { 
                  reovle(null); 
              }
            else {
                reovle(bundle);

            }
        }) 
    }); 

如上代码直接判断返回是不是null就可以,真机测试直接就报错蹦了。。。哪位大佬遇到过吗 :joy: :joy:

手工置顶 :slightly_smiling_face: :grinning: :slightly_smiling_face:

嘎嘎嘎嘎嘎嘎嘎,难道要直接判断自己存的子包的cc.config.json文件是否存在?

为什么要判断这个子包是否存在呢?

可以列一些场景吗?

const projectBundles = cc.settings.querySettings(cc.Settings.Category.ASSETS, 'projectBundles') as string[];
if (projectBundles.indexOf(bundleName) === -1) ...

大厅中在进入子游戏前,先判断该子游戏本地包是否存在,不存在再去下载后进入子游戏

感谢回复,但这个好像是打在包里的,我这个是下载子包后判断的。看来先自己加个的下载后可读目录的manifest判断吧,一般下载成功了manifest肯定在指定的读写目录中存在了,之后在进行版本更新的判断

cc.native.fileUtils.isFileExist(path.join(jsb.fileUtils.getWritablePath(),"blackjack-remote-asset","Cache","tank/tank.manifest"))

先类似于上面这么写了

如果是这样子的话,那你这个做法有所欠佳

你应该在生成热更新文件的时候,弄多一份配置,说明 当前这个版本 的子包有哪些

当你热更新到这个版本时,读取这份配置,你一下子就能知道哪些包应该热更新,哪些包不用。

这份配置放哪里?放主包里

其实一般情况下是这样的,检查热更->热更->进入游戏。所以不需要关心其他,只需要检查有没有对应的manifest,没有就动态构造一下,热更完成就进入

嗯嗯,tank是个例子,实际有严格的编号id如,subitem_1001~??? 根据服务端初始化数据初始化