等待动画在unity3d中完成

我有一个动画,在Switch case中的Update -function中播放。

动画结束后,将布尔值设置为true。

我的代码:

 case "play": animation.Play("play"); gobool = true; startbool = false; break; 

问题是我的goboolstartbool立即设置而没有完成动画。 如何让我的程序等到动画结束?

基本上,您需要为此解决方案做两件事:

  1. 开始动画。
  2. 在播放下一个动画之前等待动画完成。

如何做到这一点的一个例子是:

 animation.PlayQueued("Something"); yield WaitForAnimation(animation); 

WaitForAnimation的定义是:

C#:

 private IEnumerator WaitForAnimation (Animation animation) { do { yield return null; } while (animation.isPlaying); } 

JS:

 function WaitForAnimation (Animation animation) { yield; while ( animation.isPlaying ) yield; } 

do-while循环来自实验,这些实验表明animation.isPlaying在调用PlayQueued的同一帧中返回false

通过一点点修改,您可以为动画创建一个扩展方法,简化了这种方法,例如:

 public static class AnimationExtensions { public static IEnumerator WhilePlaying( this Animation animation ) { do { yield return null; } while ( animation.isPlaying ); } public static IEnumerator WhilePlaying( this Animation animation, string animationName ) { animation.PlayQueued(animationName); yield return animation.WhilePlaying(); } } 

最后,您可以在代码中轻松使用它:

 IEnumerator Start() { yield return animation.WhilePlaying("Something"); } 

来源,替代方案和讨论。