在一个案例中,我有一个在Update
-function 中播放的动画。Switch
动画结束后,布尔值被设置为真。
我的代码:
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 循环来自实验,该实验表明调用 PlayQueued 的同一帧中的animation.isPlaying
返回。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");
}