大厅子游戏实现指引,creator2.0以上

这个需要看你的模块包含的内容了,每个模块所包含的资源都是可控的。
其实分包的难点是在资源的处理,怎么界定某个资源属于什么模块 和 可能对其他模块造成的影响,这个才是实际开发中要注意的。

在这个方案中,所有模块都包含了脚本资源和公共部分的资源,如果更新公共资源,则有可能对子模块造成影响,这个需要自己去判定。(实际开发中我们都会降低各个功能之间的耦合度,模块之间的关联影响应该还是很少的)

被场景引用到的资源,有其中一部分,自动被记录到场景对应的模块,有一部分没有记录到场景对应的模块,楼主有出现这样的问题吗?

是这里提到的问题导致的?需要怎么解决呢?

1.Editor.assetdb.isMountByUuid 这个方法在 2.0.10 如果是内置资源返回的也是false

2.自动图集,Editor.assetdb.uuidToUrl(asset),返回null,有时候正常

大佬,构建是不是要勾选source map 不然构建出来的代码文件都合并到project.dev.js了

还是说,代码文件是不能分开更新的。。?

source map是在开发阶段方便你查看信息用的,构建后的代码都是会合并的,无法分开更新。

//第 3 步   以uuid为key,记录所有资源所属子包
let asset_module = {}
let fn = (uuid,mod)=>{
    if(!asset_module[uuid])
        asset_module[uuid] = [mod]
    else if(!asset_module[uuid].includes(mod))
        asset_module[uuid].push(mod)
    let depends = buildResults.getDependencies(uuid) || []
    for(let k=0;k<depends.length;k++){
        fn(depends[k],mod)
    }
}
for(let i=0;i<asset_pack.length;i++){
    let asset = asset_pack[i]
    // let depends = buildResults.getDependencies(asset.uuid) || [] //依赖资源
	let mount = Editor.assetdb.isMountByUuid(asset.uuid)  //是否内置资源
	let mod = asset_module[asset.uuid]  //资源模块名称
    if(mount)
        fn(asset.uuid,'hall')
    else if(!mod){
        let name
        if(path_module[asset.dir])
            name = path_module[asset.dir]
        else if(path_module[asset.url])
            name = path_module[asset.url]
        if(name){
            let temp = name.split('&')
            for(let i=0;i<temp.length;i++)
                fn(asset.uuid,temp[i])
        }
    }
}

你的这个反馈让我想到了这段代码有个逻辑错误,if(mount) fn(asset.uuid,‘hall’)我将内置资源分到 hall 模块了,然后又将依赖 hall 的资源都分到 hall 模块,其实是错误的。
内置资源其实应该单独分一个模块,而所有依赖mount的的资源 不需要处理。

mark一下,正在研究这块的东西。

模拟器热跟新成功,调用cc.game.restart 屏幕会一直闪烁,但是关掉再重新打开模拟器就能正常,大佬你会这样吗?

mark

如果只是版本号变动,整个模块的资源都要更新?
我先把前端的版本更新到最新,然后修改远程的版本,这个时候前端热跟新会下载整个模块的所有文件

mark

确实模拟器restart会闪烁(报错),仅仅用来测试热更过程就可以了。
只是版本号变动不会导致重新下载的,热更过之后,热更路径会存在一份资源配置文件,以后再热更,要拿这份配置文件和服务器比对。

恩恩,是因为包内找不到hall模块的资源配置文件,所以,自动创建一个project.manifest文件,但是这个文件没有main模块的文件的相关信息,所以会导致版本号变动,整个hall模块的资源都要下载。

我看你的demo代码和打包流程,编译包的时候要先把 hall_project.manifest 和 hall_version.manifest文件放到app/assets文件夹下,但是热跟新时,代码读取hall_project.manifest文件路径是:jsb.fileUtils.getWritablePath() + “2.0” + "hall_project.manifest ",这样会出现,如果是首次热跟新hall模块,要下载所有的main模块的资源。是这这样吗?

    this.file_manifest = ''
    let temp = jsb.fileUtils.getWritablePath() + this.updir + '/' + this.file_project
    if(jsb.fileUtils.isFileExist(temp))
        this.file_manifest = jsb.fileUtils.getStringFromFile(temp)
    else if(mod == '' || mod == 'hall') //大厅或单包,请确认你的包体内包含资源列表配置文件
        this.file_manifest = jsb.fileUtils.getStringFromFile(this.file_project)

代码里有判断的,如果是hall模块,首先去 更新路径 查找配置文件,更新路径中配置文件不存在时,才会去 app/assets下面读取,首次热更hall也是正常的,并不会导致下载所有的资源。

mark一下

楼主你好,。我现在执行bat文件报asset_module.json这个文件找不到,。我找遍了我的工程也没找到,请您指点下,我的QQ12170444,希望QQ沟通

这个是构建后才会生成的,在相应的构建模板目录下,你可以看 package/assetlist/main.js文件,生成代码在这里面

多谢大佬的回复,我这边仔细看了代码,目前资源文件build后成2种文件,一种是json格式的,一种是png格式的,目前png格式的uuid和文件名一样的,但是json格式的和uuid没有关系,现在使用脚本分离就只能把图片资源资源分离出来,音频,scene,js,font这些资源没有办法区别,请教下这个怎么处理

mark一下

build后是能拿到完整的build资源配置的,你可以通过依赖关系去处理。
比如prefab上挂载了音频,这样就可以拿到prefab的依赖资源音频的uuid了。
当然有的资源是不明确的,比如一个场景资源,需要你自己定义一份配置,声明下场景是A类资源,然后就能确定这个场景依赖的资源都属于A。