Unity c#延迟,以便动画播放

本文关键字:动画 播放 延迟 Unity | 更新日期: 2023-09-27 18:16:12

我正在构建一个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之间设置某种延迟。问题是,当我试图使用调用所有函数在Alpha开始表现奇怪和bug。例如,许多对象实际上并没有被销毁。

我正在寻找一种方法,使该函数调用延迟后。我已经尝试了yield return new WaitforSeconds方法,但它不起作用。也尝试了LeanTween.delaiedCall的东西,但它给了我一个错误,当我试图通过Alpha,因为它想要一个System.Action.

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

Unity c#延迟,以便动画播放

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

我不能测试这个,因为我没有精益间缝,但文档显示了这里该怎么做。这应该是可行的。

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

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

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

当你调用移动函数时,你必须设置这两个参数