新手来了。我已经加载了一个,fbx角色,外加来自Mixamo的附加动画剪辑。这个想法是,当一个键("Q")被点击时,动画就会切换。运行时,角色加载并播放第一个动画片段。按键时,动画剪辑会更改,但动画不会播放。这是我目前所在的位置..character anim
下面是相关的代码片段...
let Actions = [];
let action;
let animPaths = [ "./models/T-Pose.fbx","./models/Walking.fbx","./models/Running.fbx","./models/Idle.fbx" , "./models/Dancing.fbx"];
let pathIDs = ["t-pose","walking", "running", "idle", "dancing"];
let moe;
let mixer;
const loader = new FBXLoader();
loader.load("./models/T-Pose.fbx", function(object){
object.scale.set(0.1, 0.1, 0.1);
/* object.traverse(function(child){
if(child.isMesh){
child.material = material;
}
})*/
moe = object;
moe.position.y = -70;
mixer = new THREE.AnimationMixer(object);
action = mixer.clipAction(object.animations[0]);
Actions.push(action);
//action.play();
scene.add(object);
loadNextAnimation(loader);
});
function loadNextAnimation(loader){
for(let i=1;i<animPaths.length;i++){
loader.load(animPaths[i], (object) =>{
mixer = new THREE.AnimationMixer(moe);
Actions.push(mixer.clipAction(object.animations[0]));
scene.add(object);
action = Actions[i];
mixer.stopAllAction();
action.play();
})
}
}
let i = 0;
let fwd = true;
document.onkeydown = function(event) {
// 81 = q
if(event.keyCode == 81){
if(i < 1) fwd = true;
if(i > Actions.length) fwd = false;
if(fwd){
i++;
}else{
i--;
}
action = Actions[i];
mixer.stopAllAction();
//mixer.reset();
action.play();
console.log("i = " + i);
console.log(animPaths[i]);
document.getElementById("testtext").value = "currentClip = "+pathIDs[i];
animate();
}
};
谁能告诉我我哪里搞砸了?谢谢。
发布于 2021-08-09 18:46:46
找到了解决方案(谢谢,哈罗德)。我上传T-Pose的时候创建了一个混音器。然后,在loadNextAnimation(加载器)函数中,我在每次加载新动画时创建一个新的混合器,覆盖以前的混合器。只需删除一行新的mixer= THREE.AnimationMixer(moe);就解决了这个问题。
https://stackoverflow.com/questions/68715223
复制相似问题