首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >three.js问题:角色切换上有多个动画,但无法播放

three.js问题:角色切换上有多个动画,但无法播放
EN

Stack Overflow用户
提问于 2021-08-09 16:05:55
回答 1查看 203关注 0票数 0

新手来了。我已经加载了一个,fbx角色,外加来自Mixamo的附加动画剪辑。这个想法是,当一个键("Q")被点击时,动画就会切换。运行时,角色加载并播放第一个动画片段。按键时,动画剪辑会更改,但动画不会播放。这是我目前所在的位置..character anim

下面是相关的代码片段...

代码语言:javascript
复制
        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();
            }
        };

谁能告诉我我哪里搞砸了?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-08-09 18:46:46

找到了解决方案(谢谢,哈罗德)。我上传T-Pose的时候创建了一个混音器。然后,在loadNextAnimation(加载器)函数中,我在每次加载新动画时创建一个新的混合器,覆盖以前的混合器。只需删除一行新的mixer= THREE.AnimationMixer(moe);就解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68715223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档