public static IEnumerator TweenRoutine(this Animator animator, Vector3? position, Quaternion? rotation,
int state, Action onComplete = null)
{
var transform = animator.transform;
var startPosition = transform.position;
var startRotation = transform.rotation;
while (!animator.IsInTransition(0) || animator.GetNextAnimatorStateInfo(0).nameHash != state)
{
yield return null;
}
while (animator.IsInTransition(0) && animator.GetAnimatorTransitionInfo(0).normalizedTime < 1)
{
var percentage = Mathf.Clamp(animator.GetAnimatorTransitionInfo(0).normalizedTime, 0, 1);
if (position != null)
{
transform.position = Vector3.Lerp(startPosition, (Vector3)position, percentage);
}
if (rotation != null)
{
transform.rotation = Quaternion.Lerp(startRotation, (Quaternion)rotation, percentage);
}
yield return null;
}
if (position != null)
{
transform.position = (Vector3)position;
}
if (rotation != null)
{
transform.rotation = (Quaternion)rotation;
}
if (onComplete != null)
{
onComplete();
}
}