求助!一个AB包中的预制体直接引用到另一个AB中的预制体

一个AB包中的预制机直接引用到另一个AB中的预制机,这个加载流程是咋样的?

先初始A预制体,B预制机是挂在A上的,这个怎么处理,难道要给一个空节点,然后add上去?

有没有其它办法?

如果一个Bundle里引用了另一个Bundle的资源,引擎会自动去加载的

预制体没有测过,是没有读取到然后报错了么?

可以loadBundle加载那个预制体,然后实例化挂上去

是的,是读取报错了,应该是B预制机没有被加载出来

//加载资源,需填写完整路径(BundleName / FileName)
loadAsync(path: string): Promise {
return new Promise((resolve) => {
let index = path.indexOf(’/’);
let bundleName = path.substring(0, index);
let filePath = path.substring(index + 1);
cc.assetManager.loadBundle(bundleName, (err: Error, bundle: cc.AssetManager.Bundle) => {
if (err) { cc.error(loadAsync加载Bundle失败!(${bundleName})); resolve(null); return; }
let files = bundle.getDirWithPath(’’);
let type = cc.Prefab;
for (let i = files.length - 1; i > -1; --i) {
if (filePath === files[i].path) { type = files[i].ctor.prototype.constructor; break; }
}
bundle.load(filePath, type, (err: Error, asset: any) => {
if (err) { cc.error(loadAsync加载资源失败!(${path})); resolve(null); return; }
resolve(asset); return;
});
});
});
}

完整版可以看这个教程:https://blog.csdn.net/weixin_42714632/article/details/138569631

我知道如何去加载它,现在我的疑问点,A预制机挂的B预制机,如何去实现B预制机,因为B是挂在A上的,不是赋值的。
所以我有一个方法,不直接挂B,给个空的节点挂在A上,然后等A加载完成后,我再脚本中赋值加载完的B给空节点。
除了这样,有没有别的办法。

你都用上这方法了,不如直接loadBundle读取预制体,instantiate,setParent纯代码挂上去,还需要什么空节点

按你的描述,B应该放在公共Bundle里,Loading的时候加载到缓存,随时可以动态挂上去

如果不是公共资源,就应该跟A放同一个Bundle里,也就不存在你这个问题了

是的,它是公共资源,我可能需要弄个公共资源包,然后常驻内存。
谢谢大佬的细心指导!