等待动画在unity3d中完成
我有一个动画,在Switch
case中的Update
-function中播放。
动画结束后,将布尔值设置为true。
我的代码:
case "play": animation.Play("play"); gobool = true; startbool = false; break;
问题是我的gobool
和startbool
立即设置而没有完成动画。 如何让我的程序等到动画结束?
基本上,您需要为此解决方案做两件事:
- 开始动画。
- 在播放下一个动画之前等待动画完成。
如何做到这一点的一个例子是:
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"); }
来源,替代方案和讨论。