等待动画在unity3d中完成

时间:2013-02-27 10:51:28

标签: c# animation camera boolean unity3d

我有一个动画,在[{1}} - 函数中播放Update个案例。

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

我的代码:

Switch

问题是我的case "play": animation.Play("play"); gobool = true; startbool = false; break; gobool在没有完成动画的情况下立即设置。如何让我的程序等到动画结束?

1 个答案:

答案 0 :(得分:7)

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

  1. 启动动画。
  2. 在播放下一个动画之前,请等待动画完成。
  3. 如何做到这一点的一个例子是:

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

    Source, alternatives and discussion.