Прямо сейчас ваш код в StartPath
не ждет завершения MoveObject
. Вы можете решить эту проблему, запустив StartPath
в сопрограмме и используя yield return MoveObject(start, target, lungespeed)
.
Все равно остановит выполнение цикла foreach в startPath
до тех пор, пока MoveObject
не завершится с yield return new WaitForSeconds
public IEnumerator StartPath() {
foreach (GameObject field in path) {
start = transform.position;
target = new Vector3(field.transform.position.x + lungeDistance, field.transform.position.y, field.transform.position.z);
coroutine = MoveObject(start, target, lungeSpeed);
yield return StartCoroutine(coroutine);//this will keep the foreach loop from iterating untill the coroutine has finished
}
}
также небольшое примечание:
(поскольку сопрограмма выполняется в новом параллельном потоке)
Неверно. Сопрограммы не работают в отдельном потоке. Сопрограмма запускается в основном потоке, как и весь остальной код, она просто делает небольшую хитрость, когда приостанавливает и возобновляет выполнение на основе ваших операторов yield, но все же в основном потоке.
Если вы хотите запустить что-то в отдельном потоке, вам нужно позвонить new Thread()
. Однако это совсем другой кусок пирога, поскольку нить не может наследовать от монобихи