У меня есть список (называемый путем) с GameObjects. Текущий GameObject (с прикрепленным скриптом) должен поэтапно перемещаться из одной позиции GameObjects в путь к следующей. Мой текущий код заставляет его немедленно перемещаться в последнюю позицию пути. Я уже пробовал использовать WaitForSeconds
в конце сопрограммы, но, поскольку все они запускаются одновременно, это не дает никакого эффекта.
Что я могу сделать, чтобы получить эффект шаг за шагом?
Вот мой код до сих пор:
public List<GameObject> path;
private Vector3 start;
private Vector3 target;
private float lungeSpeed = .8f;
private float lungeDistance = 5;
private IEnumerator coroutine;
public void 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);
StartCoroutine(coroutine);
}
}
IEnumerator MoveObject(Vector3 start, Vector3 target, float speed)
{
float t = 0.0f;
float rate = 1.0f / speed;
while (t < 1.0)
{
t += Time.deltaTime * rate;
transform.position = Vector3.Lerp(start, target, t);
yield return null;
}
yield return new WaitForSeconds(1);
}