等待的动画在unity3d完成(Wait for an animation to finish in

2019-07-20 14:43发布

我有在播放动画Update功能全,在Switch的情况下。

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

我的代码:

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

问题是我的goboolstartbool立即得到设定没有完成的动画。 我怎样才能让我的程序等待,直到动画结束?

Answer 1:

基本上你需要为这个解决方案的工作做两件事情:

  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返回false在同一帧PlayQueued被调用。

随着稍微修改一下就可以创建动画扩展方法,它简化了这个功能,比如:

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");
}

资料来源,替代品和讨论。



文章来源: Wait for an animation to finish in unity3d