检查动画片段是否已完成

时间:2016-01-27 06:41:28

标签: c# animation unity3d

这是更新内部的简单代码。可悲的是,它不适合我。事件我已将环绕模式设置为永远夹紧!

 if (trainGO.GetComponent<Animation>()["Start"].time >= trainGO.GetComponent<Animation>()["Start"].length)
 {
      blackTrain.SetActive(true);
      redTrain.SetActive(false);
 }

如何检查动画片段是否已完成,以便我可以完成一些工作。 我不想使用WaitForSeconds方法。因为我在时间上徘徊,每次都会播放新动画

1 个答案:

答案 0 :(得分:3)

基本上就是这样......

PlayAnimation(); // Whatever you are calling or using for animation
StartCoroutine(WaitForAnimation(animation));

private IEnumerator WaitForAnimation ( Animation animation )
    {
    while(animation.isPlaying)
        yield return null;

    // at this point, the animation has completed
    // so at this point, do whatever you wish...
    Debug.Log("Animation completed");
    }

您可以简单地谷歌关于此示例的成千上万的质量保证,http://answers.unity3d.com/answers/37440/view.html

如果您不完全了解Unity中的协同程序,请退回并查看大约8,000个完整的初学者教程和QA中的任何一个关于Unity&#34;中的协同程序。在网上。

这确实是检查动画在Unity中完成的方式 - 它是一种标准技术,而且别无选择。

你提到你想在Update()做某事......你可能会做这样的事情:

private Animation trainGoAnime=ation;

public void Update()
    {

    if ( trainGoAnimation.isPlaying() )
        {
        Debug.Log("~ the animation is still playing");
        return;
        }
    else
        {
        Debug.Log("~ not playing, proceed normally...");
        }
    }

我强烈建议你用协程来做;你结束了&#34;结...&#34;如果你试图&#34;总是使用Update&#34;。希望它有所帮助。

仅供您参考&#34;实际情况是:在指定时间(时间/时钟分别运行)。我必须播放动画,这就是为什么我使用更新来检查时间并相应地运行动画&#34;

这很容易做到,比如你想从现在开始运行动画3.721秒......

private float whenToRunAnimation = 3.721;

这很容易!

    // run horse anime, with pre- and post- code
    Invoke( "StartHorseAnimation", whenToRunAnimation )

private void StartHorseAnimation()
  {
  Debug.Log("starting horse animation coroutine...");
  StartCoroutine(_horseAnimationStuff());
  }

private IENumerator _horseAnimationStuff()
  {
  horseA.Play();
  Debug.Log("HORSE ANIME BEGINS");
  while(horseA.isPlaying)yield return null;
  Debug.Log("HORSE ANIME ENDS");
  ... do other code here when horse anime ends ...
  ... do other code here when horse anime ends ...
  ... do other code here when horse anime ends ...
  }