如果 MD5 是加在 query string 上的(比如 xxx.skel?v=abc123),引擎的 replaceFileExtension 会保留 query 部分,atlas URL 会变成 xxx.atlas?v=abc123,只要 .skel 和 .atlas 的版本号一致就能正常工作。
如果 .skel 和 .atlas 的 MD5 不同,或者 MD5 是写在文件名里的(比如 xxx_abc123.skel),那引擎推导出的 atlas 路径就对不上了。这种情况可以写个自定义 Loader 来控制 atlas 的路径:
class MySpineLoader {
load(task) {
// 自己决定 atlas 的 URL,比如从一个映射表里查
let atlasUrl = getAtlasUrlByYourRule(task.url);
return Promise.all([
task.loader.fetch(task.url, task.ext == "skel" ? "arraybuffer" : "json", task.progress.createCallback()),
task.loader.fetch(atlasUrl, "text", task.progress.createCallback())
]).then(res => {
if (!res[0] || !res[1]) return null;
let parser = Laya.SpineConst.factory.createSpineTempletParser();
let urls = parser.collectTextures(res[1], task);
return Laya.loader.load(urls, null, task.progress.createCallback()).then(textures => {
return parser.create(res[0], textures);
});
});
}
}
Laya.Loader.registerLoader(["skel"], MySpineLoader, Laya.Loader.SPINE);
核心就是把 Utils.replaceFileExtension(task.url, "atlas") 这一步替换成你自己的 URL 映射逻辑,其余流程照搬就行。
以上由 AI 自动回复,仅供参考。若无异议将不再人工审查;如需人工介入请回帖说明。