Animation 在循环上播放相同的动画动作而不重置位置

Animation 在循环上播放相同的动画动作而不重置位置,animation,three.js,Animation,Three.js,我正在尝试从animationClip在gltf模型上运行行走动画。目标是在按下向上箭头键时播放行走动画,并在按住该键时使其保持运行。因此,每当第一个动画完成时,我都会播放动画,但动画只播放一次。它触发完成的事件,但没有动画 walkAction = mixer.clipAction(walkClip); walkAction.loop = THREE.LoopOnce; walkAction.enabled = true; walkAction.paused = true; walkActio

我正在尝试从animationClip在gltf模型上运行行走动画。目标是在按下向上箭头键时播放行走动画,并在按住该键时使其保持运行。因此,每当第一个动画完成时,我都会播放动画,但动画只播放一次。它触发完成的事件,但没有动画

walkAction = mixer.clipAction(walkClip);
walkAction.loop = THREE.LoopOnce;
walkAction.enabled = true;
walkAction.paused = true;
walkAction.clampWhenFinished = true;
walkAction.play();

mixer.addEventListener('finished', restoreAnim);

function restoreAnim(event){
  mixer.removeEventListener('finished', restoreAnim);
  walkAction.play();
}
上面的代码是为了让角色保持移动,但是在第一次之后它就停止了,但是完成的eventListener仍然被反复触发


还有其他的方法吗。我正在使用mixamo的行走动画,即使使用多个动画并更改不同的属性,问题仍然存在。

hhmmm。。。也许如果你在restoreAnim函数中添加一个.stop()或.reset()?@EthanHermsey使用reset播放剪辑循环,并在那里终止它。当第一个循环结束到新位置时,我必须更改模型的位置,然后再播放它?啊,我现在明白了。three.js动画系统不支持在动画结束的位置开始动画,就像您想要的那样。您是对的,解决方案可能是在动画结束时更改模型的位置。但你必须计算出多少。更好的方法是在blender之类的软件中删除模型的翻译。只需要跑步运动。播放动画时,可以相应地平移模型的位置。。。也许如果你在restoreAnim函数中添加一个.stop()或.reset()?@EthanHermsey使用reset播放剪辑循环,并在那里终止它。当第一个循环结束到新位置时,我必须更改模型的位置,然后再播放它?啊,我现在明白了。three.js动画系统不支持在动画结束的位置开始动画,就像您想要的那样。您是对的,解决方案可能是在动画结束时更改模型的位置。但你必须计算出多少。更好的方法是在blender之类的软件中删除模型的翻译。只需要跑步运动。播放动画时,可以相应地平移模型的位置。