2013-02-27 144 views
1

我有一个动画在Update函数中播放,在Switch的情况下。等待动画在unity3d中完成

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

我的代码:

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

问题是我的goboolstartbool立即得到设定没有完成的动画。如何让我的程序等到动画完成?

回答

6

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

  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被调用。

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

IEnumerator Start() 
{ 
    yield return animation.WhilePlaying("Something"); 
} 

Source, alternatives and discussion.

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

最后,你可以很容易地在代码中使用此