【问题标题】:Playing same animation action on loop without reseting position循环播放相同的动画动作而不重置位置
【发布时间】:2022-04-29 19:46:00
【问题描述】:

我正在尝试在来自 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();
}

上面的代码是为了让角色保持移动,但是第一次之后它就卡住了,但是完成的事件监听器仍然重复触发。

还有其他方法可以做到这一点。我正在使用 mixamo 中的步行动画,即使使用多个动画并更改不同的属性,问题仍然存在。

【问题讨论】:

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

标签: animation three.js


【解决方案1】:

您在哪里下载该动画。如果它是像“mixamo.com”这样的网站,将会有一个名为“就地”的选项。在下载所选动画之前,您必须选中该复选框。然后您的动画将在不重新定位其位置的情况下播放。 check this "In place" checkbox

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多