public void LerpTo(Vector3 targetPosition, Quaternion targetRotation, ZoomFinishedCallback zoomFinished) { if (whichZoom) { if (zooming2) { cancelZoom2 = true; } zooming1 = true; } else { if (zooming1) { cancelZoom1 = true; } zooming2 = true; } StartCoroutine(LerpToStep(targetPosition, targetRotation, whichZoom, zoomFinished)); whichZoom = !whichZoom; }
IEnumerator LerpToStep(Vector3 targetPosition, Quaternion targetRotation, bool firstZoom, ZoomFinishedCallback zoomFinished) { while (Quaternion.Angle(transform.rotation, targetRotation) > 0.01f && Vector3.Distance(targetPosition, transform.position) > 0.01f) { if (firstZoom && cancelZoom1) { cancelZoom1 = false; zooming1 = false; if (zoomFinished != null) { zoomFinished(); } yield break; } else if (!firstZoom && cancelZoom2) { cancelZoom2 = false; zooming2 = false; if (zoomFinished != null) { zoomFinished(); } yield break; } transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, Time.deltaTime * 6.0f); transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * 8.0f); yield return(null); } if (firstZoom) { zooming1 = false; } else { zooming2 = false; } transform.rotation = targetRotation; transform.position = targetPosition; if (zoomFinished != null) { zoomFinished(); } }
public void GoBackToStart(ZoomFinishedCallback zoomFinished) { LerpTo(startPosition, startRotation, zoomFinished); }