如果每个bundle里面各有一个场景,怎么切换合适

那是每个场景名字一样:
director.loadScene(‘a/scene’);//总感觉这么切换有时候不灵的样子

还是每个场景名字不能一样:
director.loadScene(‘a’);

你要先loadbundle,再执行你的a/scene,,
有时候灵是因为你加载过某些bundleA的资源,这个bundle被加载过了
不灵就是bundle没被加载过直接loadScene了

话说director.loadScene(‘a/scene’);这么写它会自己去找a包里面的scene场景吗

用bundle.loadScene

assetManager.getBundle(‘a’).loadScene(‘scene’);//不能用。
director.loadScene(‘a/scene’);//反而能用
getBundle(‘a’)里面是有的

:rofl:我也测试下了,确实不行

1赞

所以多包多场景的时候想场景名字还一样,该怎么处理比较合适

我不知道你具體用哪個版本
但是根據文檔
https://docs.cocos.com/creator/3.7/manual/zh/asset/bundle.html

加载场景

Asset Bundle 提供了 loadScene 方法用于加载指定 bundle 中的场景,你只需要传入 场景名 即可。
loadScenedirector.loadScene 不同的地方在于 loadScene 只会加载指定 bundle 中的场景,而不会运行场景,你还需要使用 director.runScene 来运行场景。

typescript

bundle.loadScene('test', function (err, scene) {
    director.runScene(scene);
});

是需要用bundle loadscene之後 還要去runscene

2赞

看源码吧,直接director.loadScene就行了,前提是你要确保分包已加载

1赞

他不是有个同名的前提条件吗?

确保已加载的分包里面 场景名唯一就行了吧。把之前的场景,所在的分包释放掉不就好了。要是确实同时存在,建议改场景名称,要么就是设计的不合理。而且真出现这种情况,引擎报不报错都还不知道呢。

或者手动bundle.loadScene后runSceneImmediate。源码都帖了没看?

director.loadScene(‘a/scene’);director.loadScene(‘b/scene’);之前用着这种方式,仿佛它会自动找包加载底下的scene,也没错过,最近总觉得代码没问题但没执行到它一样,就来问问这么写合适吗

cc.assetManager.getBundle(“a”).loadScene(‘scene’, function (err, scene) {
cc.director.runScene(scene);
});
这样写长了些,但会合理些吧,至少bug的时候不会觉得它的问题

当然这个合理啊,如果觉得太长,就封装下
image

  1. 那报错还是不报错呢?
    你都看引擎代码了,不能给个准确的回复吗?
    如果报错,修改逻辑是什么?
    如果不报错,修改逻辑是什么?
  2. 同名场景名的设计不合理,体现在什么地方?
    如果合理,该怎么做?
    如果不合理,应该怎么处理?
  3. 如果合理,且有同名的,能不能释放以前的分包?
    如果能,为什么能?
    如果不能,该怎么用你原来的方式?

回答问题前,先冷静下,改需求去满足别人的问题是很简单的,但能不能改,改了的工作量是不是更大,这才是更要考虑的。

改个场景名工作量很大是吧? :sweat_smile: 多个分包同时在内存里面 还每个分包有个相同的场景名,这设计合理是吧?你要是觉得合理,那当我没说。每个分包都有个MainScene 而且还同时会切来切去是吧,神仙设计。

也许都MainScene,毕竟3.x可以不同目录同脚本名了,那场景名也一样不也还行

同场景名一定是类似场景,这种场景之间跳转统一由控制器管理,退出场景就释放分包,同场景名所在分包只会维持一份。业务场景不存在这种冲突bug。当然也做了bundle.loadScene的兼容,更多是直接director.loadScene