public IEnumerator MoveToPosition(vIControlAI controlAI) { lastTargetDirection = controlAI.transform.forward; onStartMove.Invoke(); controlAI.SetSpeed(speed); controlAI.MoveTo(target.position); controlAI.ForceUpdatePath(2f); yield return(new WaitForSeconds(1)); while (!controlAI.isInDestination && canMove) { if (controlAI.remainingDistance > 2) { controlAI.MoveTo(target.position); lastTargetDirection = target.position - controlAI.transform.position; lastTargetDirection.y = 0; } else { controlAI.StrafeMoveTo(target.position, rotateToTargetForward ? target.forward : lastTargetDirection); } yield return(null); } if (canMove) { onFinishMove.Invoke(); } else { onCancelMove.Invoke(); } canMove = false; }