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.
我正在寻找一种方法,使这个动画工作,然后销毁对象不涉及任何碰撞
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
}
}
这是一个简单的解决方案。也为什么你调用时,函数是在同一个文件?
当你调用移动函数时,你必须设置这两个参数