protected virtual IEnumerator Navigate(Vector3 destination) { Node srcNode = Navigation.Instance.NearestTo(transform.position); Node dstNode = Navigation.Instance.NearestTo(destination); _gizmoRealTarget = dstNode; Node reachedDst = srcNode; if (srcNode != dstNode) { rotateInPath = true; var path = GraphOperations.AStar(srcNode, dstNode).ToList(); if (path != null) { foreach (var next in path.Select(w => FloorPos(w.Content))) { RotateInPath(next); while ((next - FloorPos(this)).sqrMagnitude >= 0.05f) { _vel = (next - FloorPos(this)).normalized; yield return(null); } } } reachedDst = path.Last().Content; } if (reachedDst == dstNode) { rotateInPath = false; _vel = (FloorPos(destination) - FloorPos(this)).normalized; yield return(new WaitUntil(() => (FloorPos(destination) - FloorPos(this)).sqrMagnitude < 0.05f)); } _vel = Vector3.zero; OnReachDestination(reachedDst, reachedDst == dstNode); }