在特定时间播放混合器动画(playAt()或skipTo())

时间:2019-05-05 22:05:25

标签: javascript three.js

我想在.gltf中有一个基本的网格动画,我想在几秒钟内的特定时间播放。

这是装载机和搅拌机的设置:

GLTFLoader.load( 'myscene.gltf', function ( gltf ) {

    model = gltf.scene;
    scene.add( model );

    mixer = new THREE.AnimationMixer( model );
    mixer.clipAction(gltf.animations[0])
        .setDuration( 60 ) //total of 1 min
        .play(); 

    render();
});

render()中,我有:

function render() {

        var delta = clock.getDelta();

        if (mixer != null) {
            mixer.update(delta);
        };

        //console.log(delta); //Doesn't show anything valuable.

        renderer.clear();
        composer.render();
        counter++;
}

到目前为止,我尝试使用.startAt(10),这只是播放之前的一个延迟。实际上,它应该重命名为.delay()startAt()应该是我想要的。我还尝试了.play(10)的无效性。 mixer.time确实会返回自播放以来经过的实际时间(以秒为单位),但无法将其设置为任何值。

由于数字似乎重复,我不了解整个clock.getDelta()的事情,也不了解该怎么玩。如何使动画从动画中的10秒开始播放……或特定的关键帧编号?

1 个答案:

答案 0 :(得分:1)

调用.clipAction()时,会得到AnimationAction类型的对象,可用于链接命令(如上例所示)。您可以将其存储在变量中,而不使用链接,然后使用.time的{​​{1}}属性来告诉它从哪里开始。

AnimationAction

您可以详细了解var mixer = new THREE.AnimationMixer( model ); var action = mixer.clipAction( gltf.animations[ 0 ] ); action.setDuration( 60 ) action.play(); action.time = 5; 属性in this page of the docs