[]Scene.load加载的时候无法正确的识别ResourceVersion

普通调试的时候没有问题,但是发布的时候再文件尾部加上了hash,加载其他UI之类的接口都没有问题,但是加载3D部分的时候,通过Scene.load加载进去的依赖资源,比如lmat之类的并没有带上hash,导致加载失败404错误找不到文件。
检查了这些资源在version.json中都是有hash的,请教一下是哪里设置没有对?
已邀请:

qian

赞同来自:

能上传一个可以让我们查看问题的demo么

watsonsong

赞同来自:

我感觉问题大概是这样的,ResourceVersion是这样处理URL的:
public static function addVersionPrefix(originURL:String):String {
if (manifest && manifest[originURL]) {
if (type == FILENAME_VERSION) return manifest[originURL];
return manifest[originURL] + "/" + originURL;
}

return originURL;
}

在version.json,也就是manifest这个表中存放在这个位置:
"scene/001/Scene/Library/unity default resources.lmat": "scene/001/Scene/Library/unity default resourcescp6d1b06e7.lmat",
但是因为我放到的不是Web浏览器的基础路径,所以浏览器访问资源使用的URL是这样的:
h5/scene/001/Scene/Library/unity%20default%20resources-Cube.lm
Failed to load resource: the server responded with a status of 404 (Not Found)
前面多了一个h5/的前缀,所以找不到了(因为是web的root目录下新建了一个h5的目录,游戏丢这个里面的)
 
但是当我放到Root目录之后,报错变成了这样,变成全路径的URL了:
laya.corecpa33cef79.js:1 GET http://192.168.9.187/scene/001 ... be.lm 404 (Not Found)

想了解一下Laya是怎么保证相对路径拼得正确的?

watsonsong

赞同来自:

 Unity导出的目录,诸如这样的路径:
Assets/Game/Scene/001/001_01/Lightmap-7_comp_light.png
是不是都必须放到bin的跟目录之下?

watsonsong

赞同来自:

ResourceVersion.addVersionPrefix
这个函数本来有两个参数,第二个参数basePath直接被忽略掉了。导致3D的引用部分无法转换成带hash的函数。
参考调用的地方:
var formatSubUrl=URL.formatURL(path,hierarchyBasePath);
这个地方的处理是有问题的,除非3D的Assets目录全部统一都放到根目录去,都这无法进行转换~

LagField

赞同来自:

跟我一样的问题,laya 自身在加载ls文件的时候,对里面的lmat文件没有做hash名称的转换,导致场景加载失败

要回复问题请先

商务合作
商务合作