1

我正在构建 ac# 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,它就可以完美运行。问题是它在动画完成之前破坏了游戏对象。因此,我需要在动画调用和 Destroy 的实际调用之间存在某种延迟。问题是,当我尝试在 Alpha 中使用 Invoke all 函数时,开始表现得很奇怪和错误。例如,许多对象实际上并未被销毁。

我正在寻找一种在延迟后进行该函数调用的方法。我已经尝试过该yield return new WaitforSeconds方法,但没有奏效。也尝试过LeanTween.delaiedCallthinggy,但是当我尝试通过Alpha时它给了我一个错误,因为它需要一个System.Action。

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

4

2 回答 2

1

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

vector3 finished = null;
GameObject tomove = null;

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

它是一个简单的解决方案。另外,当函数在同一个文件中时,为什么要调用?

此外,您必须在调用 move 函数时设置两个参数。

于 2014-08-03T01:56:31.377 回答
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;

}

我无法对此进行测试,因为我没有精益补间,但文档显示了在这里做什么。不过,这应该可行。

于 2014-08-03T09:04:24.683 回答