一次性播放动画而不是循环播放 - three.js

8

我已将Blender JSON动画导出为THREE.js格式,一切运行正常,但我想仅播放动画一次并停止,而不是循环播放动画。

3个回答

15

虽然这是一个旧问题,但是如果有人需要解决这个问题,解决方法是设置animation.setLoop(THREE.LoopOnce)

let objLoader = new THREE.ObjectLoader();

objLoader.load('./your.json', function(obj)
{
  scene.add(obj);

  let animationMixer = new THREE.AnimationMixer(obj);
  let animation = animationMixer.clipAction(obj.animations[0]);
  animation.setLoop(THREE.LoopOnce);
  animation.clampWhenFinished = true;
  animation.enable = true;

  animation.play();
})

我指的是ThreeJS r84 版本。


4
我发现在 play 后需要进行一次“重置”,因此使用 animation.play().reset(); - Abraham Brookes
可能先调用 play 再调用 reset 能正常工作,但更规范和安全的做法是先进行 reset 调用,像这样:animation.reset().play()。(文档也建议这样 https://threejs.org/docs/#api/en/animation/AnimationAction.play)。 - jox

1

0
确保您输入的是LoopOnce而不是loopOnce(就像我一样)。花了我几个小时才发现这个错误(没有错误提示)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接