public void MoveTo(Vector3 destination) { // don't change the z position of the camera, only move on x and y axis moveDestination = new Vector3(destination.x, destination.y, transform.position.z); moveInitial = transform.position; // calculate duration in function of the distance to cover, we also apply a maximum duration float distanceToCover = GameSystem.EuclideanDistance(moveInitial, moveDestination); float divider = 10f; float maxDuration = 0.4f; moveDuration = distanceToCover > maxDuration / divider ? maxDuration : distanceToCover / divider; StartCoroutine("MoveToRoutine"); }