private IEnumerator SmoothMove(List <Vector2Int> path) { const float moveTime = .1f, inverseMoveTime = 1 / moveTime; BusyMoving = false; foreach (var grid in path) { if (!BusyMoving) { BusyMoving = true; Map[(int)transform.position.x, (int)transform.position.z] &= ~MapObj.Cat; continue; } var target = new Vector3(grid.x, 0, grid.y); while ((target - transform.position).sqrMagnitude > float.Epsilon) { transform.position = Vector3.MoveTowards(transform.position, target, inverseMoveTime * Time.deltaTime); //transform.position = Vector3.Lerp(transform.position, target, 5 * Time.deltaTime); yield return(null); } transform.position = target; } catHunger.DoMove(); Map[(int)transform.position.x, (int)transform.position.z] |= MapObj.Cat; BusyMoving = false; }