C# 等待动画在unity3d中完成

C# 等待动画在unity3d中完成,c#,animation,camera,boolean,unity3d,C#,Animation,Camera,Boolean,Unity3d,我有一个动画,它在开关案例中的更新-功能中播放 动画完成后,将布尔值设置为true 我的代码: case "play": animation.Play("play"); gobool = true; startbool = false; break; 问题是我的gobool和startbool在未完成动画的情况下立即设置。如何让程序等待动画完成?基本上,要使此解决方案正常工作,您需要做两件事: 启动动画 在播放下一个动画之前,请等待动画完成 如

我有一个动画,它在
开关
案例中的
更新
-功能中播放

动画完成后,将布尔值设置为true

我的代码:

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

问题是我的
gobool
startbool
在未完成动画的情况下立即设置。如何让程序等待动画完成?

基本上,要使此解决方案正常工作,您需要做两件事:

  • 启动动画
  • 在播放下一个动画之前,请等待动画完成
  • 如何做到这一点的示例如下:

    animation.PlayQueued("Something");
    yield WaitForAnimation(animation);
    
    WaitForAnimation
    的定义是:

    C#:

    JS:

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

    基本上,要使此解决方案正常工作,您需要做两件事:

  • 启动动画
  • 在播放下一个动画之前,请等待动画完成
  • 如何做到这一点的示例如下:

    animation.PlayQueued("Something");
    yield WaitForAnimation(animation);
    
    WaitForAnimation
    的定义是:

    C#:

    JS:

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