public IEnumerator onScreenObscured(TransitionKit transitionKit) { transitionKit.transitionKitCamera.clearFlags = CameraClearFlags.Nothing; // we dont transition back to the new scene unless it is loaded if (nextScene >= 0) { SceneManager.LoadSceneAsync(nextScene); yield return(transitionKit.StartCoroutine(transitionKit.waitForLevelToLoad(nextScene))); } var transitionDistance = transitionKit.GetComponent <Camera>().orthographicSize * 2f; // 2x our camera.orthoSize so we move the slices off screen var elapsed = 0f; var mesh = transitionKit.GetComponent <MeshFilter>().mesh; var verts = mesh.vertices; while (elapsed < duration) { elapsed += transitionKit.deltaTime; var step = Mathf.Pow(elapsed / duration, 2f); var offset = Mathf.Lerp(0, transitionDistance, step); // transition our QuadSlices for (var i = 0; i < _quadSlices.Length; i++) { // odd ones move up, even down var sign = (i % 2 == 0) ? 1f : -1f; _quadSlices[i].shiftVerts(new Vector3(0, offset * sign), verts); } // reassign our verts mesh.vertices = verts; yield return(null); } }