首页 > 解决方案 > 如何在 Three.js 中返回对象而不是将其添加到场景中?(FBXLoader)

问题描述

如果我在 Javascript 中调用此函数,它会起作用,并将对象添加到场景中:

var loader = new THREE.FBXLoader();

function returnFBX(PATH, scene) {
    loader.load('obj/' + PATH + '.fbx', function (object) {
        scene.add(object);
    });
}

但是,如果我更换:

scene.add(object);

和:

return object;

它似乎返回未定义。

我尝试使用 Promises 以及加载管理器,但两者似乎都只能将对象添加到场景中,而不能返回对象。

我认为这是因为彼此之间有两个嵌套函数,并且加载是异步的。但我不确定如何解决这个问题,因为这是加载对象的标准方式。

标签: javascriptfunctionthree.js

解决方案


load是异步的——要么使用回调要么使用等待,即

const afterload = object => { console.log(object); }

function returnFBX(PATH, scene) {
    loader.load('obj/' + PATH + '.fbx', function (object) {
        afterload(object);
    });
}

或者

async function returnFBX(PATH, scene) {
    return loader.load('obj/' + PATH + '.fbx', function (object) {
        return object;
    });
}

let afterloadObject = await returnFBX( ... )

推荐阅读