我正在构建一个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。
我正在寻找一种方法来使这个动画工作,然后在不涉及任何碰撞的情况下销毁对象。
答案 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。 这应该工作。