private IEnumerator UpdateTransformDimensions(VRTK_InteractableObject ioCheck, Vector3 endPosition, Quaternion endRotation, Vector3 endScale, float duration) { var elapsedTime = 0f; var ioTransform = ioCheck.transform; var startPosition = ioTransform.position; var startRotation = ioTransform.rotation; var startScale = ioTransform.localScale; var storedKinematicState = ioCheck.IsKinematic(); ioCheck.ToggleKinematic(true); while (elapsedTime <= duration) { elapsedTime += Time.deltaTime; ioTransform.position = Vector3.Lerp(startPosition, endPosition, (elapsedTime / duration)); ioTransform.rotation = Quaternion.Lerp(startRotation, endRotation, (elapsedTime / duration)); ioTransform.localScale = Vector3.Lerp(startScale, endScale, (elapsedTime / duration)); yield return(null); } //Force all to the last setting in case anything has moved during the transition ioTransform.position = endPosition; ioTransform.rotation = endRotation; ioTransform.localScale = endScale; ioCheck.ToggleKinematic(storedKinematicState); SetDropSnapType(ioCheck); }