最实用的方案是拦截 Loader.warnFailed,它在任何资源加载失败时都会被调用,包括依赖的 @0.lh 这种内部路径:
async function loadPrefabStrict(url: string) {
let failedUrls: string[] = [];
let origWarn = Laya.Loader.warnFailed;
Laya.Loader.warnFailed = function(failUrl: string, err?: any, initiatorUrl?: string) {
failedUrls.push(failUrl);
origWarn.call(this, failUrl, err, initiatorUrl);
};
let res = await Laya.loader.load(url);
Laya.Loader.warnFailed = origWarn;
if (failedUrls.length > 0) {
console.error("依赖加载失败:", failedUrls);
return null; // 视为加载失败
}
return res;
}
这样不管依赖链多深、内部路径是什么,只要有任何一个资源失败,你都能捕获到。同时建议把 Laya.loader.retryNum 设大一些(比如 3),减少网络抖动导致的误判。
以上由 AI 自动回复,仅供参考。若无异议将不再人工审查;如需人工介入请回帖说明。