Следуя примеру загрузчика Threejs.org FBX, я загрузил мою модель с помощью этой функции:
this.obj = null;
var loader = new THREE.FBXLoader();
var objs = []
function load_init( object ) {
mixer = new THREE.AnimationMixer( object );
console.log("pushing to objs...");
objs.push(object);
console.log(objs[0]);
object.traverse( function ( child ) {
if ( child.isMesh ) {
//console.log(child)
//console.log(child.material.length)
const oldMat = child.material;
var newMat = new THREE.MeshBasicMaterial();
// if(oldMat.length == undefined)
// {
// console.log(newMat.copy(oldMat));
// child.material = newMat;
// child.material = new THREE.MeshBasicMaterial( {
// color: oldMat.color,
// } );
// }
// else
// {
// for(var i = 0; i < oldMat.length; i++)
// {
// child.material[i] = new THREE.MeshBasicMaterial( {
// color: oldMat[i].color,
// } );
// }
// }
}
} );
object.position.z -= 200;
object.position.y -= 250;
var action = mixer.clipAction( object.animations[ 0 ] );
action.play();
scene.add( object );
}
var true_load = load_init.bind(this);
console.log("printing objects...");
loader.load( 'Anims/Capoeira.fbx', true_load);
console.log(objs);//seems to have things there
console.log(objs[0]);//prints undefined
Это успешно добавляет объект, и я вижу, как воспроизводится анимация.Проблема в том, что мне нужно получить доступ к объекту, загруженному на сцену, и поэкспериментировать с его переменными (в основном, с затенением материала и цветом).Когда я делаю console.log(scene.children)
, я вижу, что это печатает всех детей.Всего их 4 (свет, земля, помощник по сетке и загруженный объект).Однако, когда я напечатаю длину, он скажет, что есть только 3 объекта, и если я попытаюсь получить доступ к загруженному объекту напрямую через массив детей или получить объект по ID или имени, я получу неопределенное значение.Я также попытался изменить функцию, чтобы она возвращала загруженный объект, и даже установил переменную с именем Загруженная_объекта, но я оставлю функцию незакрытой, а также.