3D大屏项目打包后遇到的模型资源加载问题

117 阅读1分钟

今天终于是吧3D项目调试完了,本地测试的效果是这样:

注意:(资源模块需要放在Public文件夹下,打包后不会对其进行重新编译,会原本复制到打包后的目录的)

image.png

但是,当我打包配置到服务器的时候,却出现了只加载出2D界面,3D的任何资源全部加载不了 打开F12发现报错:

image.png

image.png

请求的资源[/Model/scene/%E5%9C%BA%E6%99%AF02.mtl]不可用

于是我对比了一下我的代码,发现加载场景的时候出现这个资源

mtlLoader.load("/Model/scene/场景02.mtl", function (materials) {......}

所以打包后会将路径中的中文编译成看不懂的外星语,于是对资源包进行拼音命名

重新命名后进行打包,仍然出现访问错误:如下: image.png

image.png

到这里我发现,我的添加场景的函数:

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下的

image.png

打包后它就存在于我的打包文件夹下:

image.png

服务器的根目录压根就没有Model 这个文件夹, 于是我修改我的代码,在所有引入3D资源的路径前都添加一下我打包的文件夹名称:

image.png

然后打包放到服务器访问:

image.png

image.png

改了路径后果然能够访问到了