I was working on making a unit move through a grid in Unity2d. I got the movement to work without problems. I would want the function MovePlayer to wait until the coroutine
You can not wait for a coroutine in a function in the main thread, otherwise your game will freeze until your function ends.
Why don't you call your next step at the end of your coroutine?
private IEnumerator SmoothMovement(List<Node> path)
{
float step = speed * Time.deltaTime;
for (int i = 0; i < path.Count; i++)
{
targetPosition = new Vector3(path[i].coordinatesX, path[i].coordinatesY, 0f);
float sqrRemainingDistance = (transform.position - targetPosition).sqrMagnitude;
while (sqrRemainingDistance > float.Epsilon)
{
transform.position = Vector3.MoveTowards(transform.position, targetPosition, step);
sqrRemainingDistance = (transform.position - targetPosition).sqrMagnitude;
yield return null;
}
position = transform.position;
}
//Next Step
}