private IEnumerator handleMomentum(dfGestureBase gesture) { isMouseDown = false; const float SPEED = 10f; var direction = (Vector3)(gesture.CurrentPosition - gesture.StartPosition) * control.PixelsToUnits(); var planes = GeometryUtility.CalculateFrustumPlanes(control.GetCamera()); var startTime = Time.realtimeSinceStartup; while (!isMouseDown) { var timeNow = Time.realtimeSinceStartup; var elapsed = timeNow - startTime; if (elapsed > 1f) { break; } control.transform.position += direction * Time.deltaTime * SPEED * (1f - elapsed); yield return(null); } if (!GeometryUtility.TestPlanesAABB(planes, control.GetComponent <Collider>().bounds)) { control.enabled = false; DestroyImmediate(gameObject); } }