【发布时间】:2016-12-23 05:41:44
【问题描述】:
我正在尝试让角色将瓷砖一张一张地移动到一个位置。发生的情况是单击该位置,然后代码找到到该位置的路径并一次移动一个图块,直到它到达该位置。我有寻路代码工作,它在一个 ArrayList 中(不要判断)。然后我将数组列表插入到一个 for 循环中,如下所示:
//This function Moves Character to clicked location
void MoveToPosition(ArrayList Path)
{
int s = 2;
while (s < Path.Count)
{
Debug.Log(Path[s]);
StartCoroutine(MoveToPositionBuffer((Vector3) Path[s]));
s++;
}
ResetTiles();
}
//This does the continous Calculations Somehow
IEnumerator MoveToPositionBuffer(Vector3 Position)
{
Vector3 StartingPosition = gameObject.transform.position;
Vector3 EndPosition = Position;
EndPosition[1] = StartingPosition[1];
float counter = 0;
while(counter < 1)
{
counter += Time.deltaTime;
gameObject.transform.position = Vector3.Lerp(StartingPosition, EndPosition, counter);
yield return null;
}
}
现在我的主要问题是它遍历整个循环,然后从开始位置到结束位置进行 Lerping,并跳过从第一个图块移动到第二个图块到第三个图块的图形,等等。我是什么需要做的是暂停循环,让第一个协程在循环继续之前完成并启动第二个协程(依此类推)。我已经尝试了一些我在谷歌上找到的东西(Thread.Sleep(),协同程序中的Yield Return WaitForSeconds()),但它似乎不起作用....任何帮助将不胜感激。
【问题讨论】: