Как я могу использовать свойство * .name в родительском/дочернем случае при функции перемещения? oLoader.load() является асинхронным. К тому времени, когда я делаю object.traverse(), объект еще не загружен. Как я могу это исправить?getObjectByName в traverse THREE.JS
Это работает:
var geometry = new THREE.SphereGeometry(0.5, 32, 32);
var material = new THREE.MeshBasicMaterial({color: 0xffff00});
var sphere = new THREE.Mesh(geometry, material);
sphere.name = 'gomb';
scene.add(sphere);
var obj = scene.getObjectByName('gomb');
function remove(obj) {
scene.remove(obj);
}
remove(obj);
Но это не работает:
var oLoader = new THREE.OBJLoader();
oLoader.load('model/0004_02_00_FF_00_xxxxxx_0_00.obj', function (object, materials) {
var material_this = new THREE.MeshPhongMaterial({color: 0x00FF00});
object.traverse(function (child) {
if (child instanceof THREE.Mesh) {
child.material = material_this;
child.castShadow = true;
child.receiveShadow = true;
}
});
object.position.x = 0;
object.position.y = 0;
object.position.z = 0;
object.name = '0004_02_00_FF_00_xxxxxx_0_00';
scene.add(object);
});
var obj = scene.getObjectByName('0004_02_00_FF_00_xxxxxx_0_00', true);
function remove(obj) {
scene.remove(obj);
}
remove(obj);
Когда вы вызываете 'remove()', объект может еще не загрузиться. Когда вы вызываете 'traverse()' в обратном вызове загрузчика, объект загружается. – WestLangley