我似乎无法克隆FBX模型(从Mixamo下载的FBX),同时保留动画关键帧。
尝试了许多方法,包括使用cloneFbx代码片段(在下面的示例中包含);但都没有成功。即使将整个FBXLoader()函数放在循环内部也不能按预期工作,因为只有一个模型会一次性进行动画。
这个问题已经在这里得到了部分解决,但是我似乎无法像答案建议的那样“复制”动画序列。
有人能指出我哪里做错了吗?
这是我测试的一个粗略示例:
加载fbx模型并存储动画:
var loader = new THREE.FBXLoader();
loader.load( 'models/Walking.fbx', function ( fbx ) {
clip = fbx.animations[ 0 ];
// createVehicle(fbx); // Works! Creates one animated model via FBX
// cloneFbx via: https://gist.github.com/kevincharm/bf12a2c673b43a3988f0f171a05794c1
for (var i = 0; i < 2; i++) {
const model = cloneFbx(fbx);
createVehicle(model);
}
});
根据存储的剪辑添加混音器和动作,将模型添加到场景中:
function createVehicle(model){
model.mixer = new THREE.AnimationMixer( model );
mixers.push( model.mixer );
var action = model.mixer.clipAction( clip );
action.play();
model.traverse( function ( child ) {
if ( child.isMesh ) {
child.castShadow = true;
child.receiveShadow = true;
}
});
const x = Math.random() * groundSize - groundSize/2;
const z = Math.random() * groundSize - groundSize/2;
model.position.set(x, 0, z);
const vehicle = new Vehicle(model, x, z);
vehicles.push(vehicle);
scene.add( model );
}
动画循环:
if ( mixers.length > 0 ) {
for ( var i = 0; i < mixers.length; i ++ ) {
mixers[ 0 ].update( clock.getDelta() );
}
}
var action = model.mixer.clipAction( clip );
处停止。我不知道为什么会这样,因为动画剪辑似乎包含了适当的信息:{name: "mixamo.com", tracks: Array(53), duration: 2.4666666984558105, uuid: "5380AF34-4DB3-4BA1-AB0C-7BF2CE95EB7B"}
。 - Ryan Achten