Unity c#延迟以便播放动画

时间:2014-08-03 01:36:18

标签: c# animation unity3d delay leantween

我正在构建一个c#unity游戏,我遇到了一些麻烦让我的动画工作。我正在使用LeanTween来获取这些动画。

这是我的一些代码:

void Alpha()
{
    Destroy(Cubes[aux]);
    AddCube(aux2,Map[aux]);
    ChangeColor(aux2);
    Map[aux]=0;
    Semafor = true;
}

void MoveCube(int Initial,int Final)
{
    Semafor = false;
    EmptySpaces.Remove(Final);
    EmptySpaces.Add (Initial);
    LeanTween.move(Cubes[Initial],new Vector3(PosX[Final],PosY[Final],5),0.5f);
    aux = Initial; // auxiliar variables used because I don't know how to send params through Invoke
    aux2 = Final;
//  Invoke( "Alpha",0.6f);
    Alpha();
}

如果我像这样运行上面的代码,不使用Invoke就可以完美地运行。问题是动画结束前GameObject的故障。因此,我需要在动画调用和Destroy的实际调用之间有某种延迟。问题是,当我尝试使用Invoke中的所有函数时,我开始表现出奇怪和错误。例如,许多物体实际上并未被破坏。

我正在寻找一种在延迟后进行该函数调用的方法。我尝试了yield return new WaitforSeconds方法,但它没有用。还试过了LeanTween.delaiedCall这个东西,但是当我尝试传递Alpha时它会给我一个错误,因为它需要一个System.Action。

我正在寻找一种方法来使这个动画工作,然后在不涉及任何碰撞的情况下销毁对象。

2 个答案:

答案 0 :(得分:1)

你可以创建一个检查对象位置的函数!

vector3 finished = null;
GameObject tomove = null;

void update()
{
  if(tomove.transform.position == finished)
  {
     //call your Alpha function
  }
}

这是一个简单的解决方案。 另外,为什么在函数位于同一个文件时调用?

您还必须在调用移动功能时设置两个参数。

答案 1 :(得分:0)

LeanTween文档说要做这样的事情......

void Alpha()
{
    Destroy(Cubes[aux]);
    AddCube(aux2,Map[aux]);
    ChangeColor(aux2);
    Map[aux]=0;
    Semafor = true;
}

void MoveCube(int Initial,int Final)
{
    Semafor = false;
    EmptySpaces.Remove(Final);
    EmptySpaces.Add (Initial);
    LTDescr d = LeanTween.move(Cubes[Initial],new Vector3(PosX[Final],PosY[Final],5),0.5f);
    d.setOnComplete(Alpha);
    aux = Initial; // auxiliar variables used because I don't know how to send params through Invoke
    aux2 = Final;

}

我无法测试这个,因为我没有精益补间,但文档显示了该做什么here。 这应该工作。