【发布时间】: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 动画系统不支持让动画从它结束的位置开始,就像你想要的那样。你是对的,一个解决方案可能是在动画结束时改变模型的位置。但是你必须计算多少。更好的方法是在软件(例如搅拌机)中删除模型的翻译。只需要跑步运动。在播放动画时,您可以相应地平移模型的位置。