今天终于是吧3D项目调试完了,本地测试的效果是这样:
注意:(资源模块需要放在Public文件夹下,打包后不会对其进行重新编译,会原本复制到打包后的目录的)
但是,当我打包配置到服务器的时候,却出现了只加载出2D界面,3D的任何资源全部加载不了 打开F12发现报错:
请求的资源[/Model/scene/%E5%9C%BA%E6%99%AF02.mtl]不可用
于是我对比了一下我的代码,发现加载场景的时候出现这个资源
mtlLoader.load("/Model/scene/场景02.mtl", function (materials) {......}
所以打包后会将路径中的中文编译成看不懂的外星语,于是对资源包进行拼音命名
重新命名后进行打包,仍然出现访问错误:如下:
到这里我发现,我的添加场景的函数:
function addScene() {
mtlLoader.load("/Model/scene/sceneMaterial.mtl", function (materials) {
// track(materials)
// 加载obj格式的模型
// const objLoader1 = new OBJLoader()
materials.preload()
objLoader.setMaterials(materials)
objLoader.load("/Model/scene/sceneObj.obj", function (obj) {
// 允许产生阴影
// track(obj)
// 旋转90度
obj.rotation.x = -90 * (Math.PI / 180)
// 放大物体
obj.scale.set(28, 28, -28)
obj.traverse(function (child) {
if (child.isMesh) {
child.castShadow = true;
child.receiveShadow = true;
}
})
obj.name = "scene"
scene.add(obj)
})
})
}
会向服务器发送请求来获取资源,发送的请求将在服务器的根目录下寻找Model文件夹来 导入资源,但是我的资源是放在本地的Public下的
打包后它就存在于我的打包文件夹下:
服务器的根目录压根就没有Model 这个文件夹, 于是我修改我的代码,在所有引入3D资源的路径前都添加一下我打包的文件夹名称:
然后打包放到服务器访问:
改了路径后果然能够访问到了