因为项目太大,想把一些开发完成的模块,放在远程,新功能放在新工程里面开发,但是加载远程就报错,打包成web,就没问题。
谁知道改什么配置,可以实现开发阶段加载远程Bundle模块引用到项目里面
因为项目太大,想把一些开发完成的模块,放在远程,新功能放在新工程里面开发,但是加载远程就报错,打包成web,就没问题。
谁知道改什么配置,可以实现开发阶段加载远程Bundle模块引用到项目里面
等你的好消息!
function createBundle (id: string, data: any, options: Record<string, any>, onComplete: ((err: Error | null, data?: AssetManager.Bundle | null) => void)) {
let bundle = assetManager.bundles.get(data.name);
if (!bundle) {
bundle = data.name === AssetManager.BuiltinBundleName.RESOURCES ? resources : new AssetManager.Bundle();
data.base = data.base || `${id}/`;
bundle.init(data);
}
//HACK: Can not import scripts in GameView due to the difference of Scripting System between the GameView and Preview
if (!EDITOR && bundle.name != "你的远程包名") {
import(`virtual:///prerequisite-imports/${bundle.name}`).then(() => {
onComplete(null, bundle);
}).catch(onComplete);
} else {
onComplete(null, bundle);
}
}
assetManager.factory.register("bundle", createBundle)
试了下远程加载,在 createBundle 里的 import(virtual:///prerequisite-imports/${bundle.name}
) 处会报错,所以使用上述代码重新注册了接口就可以正常加载了。
刚从 cocos2dx 转 creator,js 还没学透,也不知道 import(virtual:///prerequisite-imports/${bundle.name}
) 是干嘛的,反正试着不走入这个逻辑也能用。
我是把包放 preview-template 内测试的,加载代码如下:
assetManager.downloader._remoteServerAddress = "./"
assetManager.downloader.remoteBundles.push("raw")
assetManager.downloader.bundleVers["raw"] = "56d09" // MD5
assetManager.loadBundle("raw", null, (err, bundle: AssetManager.Bundle) => {
bundle.load("TestPrefab", Prefab, (err, asset: Prefab) => {
let node = instantiate(asset)
this.node.addChild(node)
})
})
远程链接,loadBundle时直接出入完整的连接地址应该也可以
这个有加吗? 加载远程包前把这个加上,记得改这个位置 bundle.name != “你的远程包名”。
我记得是可以的吧,至少2.4我这么干过,直接用官方的loadBundle的api就可以了,3.x应该也是一样的吧