1

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

动画结束后,布尔值被设置为真。

我的代码:

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

问题是我的gobool,并且startbool在没有完成动画的情况下立即设置。如何让我的程序等到动画完成?

4

1 回答 1

7

基本上,您需要做两件事才能使此解决方案起作用:

  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 循环来自实验,该实验表明调用 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");
}

来源、替代方案和讨论。

于 2013-02-27T11:12:11.753 回答