在团结3D中反转动画

我有一个带动画的FBX对象。 该对象是一个带有动画的框,用于打开。 我想要做的是当用户点击一个按钮时,该框将打开(播放打开的动画),当再次单击该按钮时,该框将关闭(向后播放打开的动画)。

正在播放开始动画时,我再次单击该按钮,开始动画停止,框开始关闭,工作正常。 问题是,当动画完成(打开)然后我单击按钮关闭时,动画不会播放,它只是跳转到没有动画的关闭框。

这是我的代码:

public class ClickBtn : MonoBehaviour { public GameObject box = null; bool reverse = false; private void OnMouseDown() { Debug.Log(reverse); if (!reverse) { box.animation["Take 001"].speed = 1; } else { box.animation["Take 001"].speed = -1; } reverse = !reverse; box.animation.Play("Take 001"); } } 

你的animation.WrapMode设置错误(可能是WrapMode.Once,这是默认值)。 在您的情况下,您可以使用:

WrapMode.PingPong:Ping Pong在开始和结束之间来回。

 animation.wrapMode = WrapMode.PingPong; 

请注意,你不需要

 box.animation["Take 001"].speed = -1; 

不再,这是自动完成的。

动画结束后,时间重新开始。

简单的解决方法在向后播放之前设置时间结束。

 public GameObject box; bool direction = false; private void OnMouseDown() { Debug.Log(direction); if (!direction) { box.animation["Take 001"].speed = 1; } else { box.animation["Take 001"].speed = -1; //if animation already finisihed, set time to end before playing it backwards if(!box.animation.isPlaying){ box.animation["Take 001"].time =box.animation["Take 001"].clip.length; } } direction = !direction; box.animation.Play("Take 001"); }