/// <summary>
 /// Called on pinch gestures
 /// </summary>
 protected virtual void OnPinch(PinchInfo pinch)
 {
     if (cameraRig != null)
     {
         DoPinchZoom(pinch);
     }
 }
        /// <summary>
        /// Perform a zoom with the given pinch
        /// </summary>
        protected void DoPinchZoom(PinchInfo pinch)
        {
            float currentDistance = (pinch.touch1.currentPosition - pinch.touch2.currentPosition).magnitude;
            float prevDistance    = (pinch.touch1.previousPosition - pinch.touch2.previousPosition).magnitude;

            float zoomChange   = prevDistance / currentDistance;
            float prevZoomDist = cameraRig.CurrentZoomDistance;

            cameraRig.SetZoom(zoomChange * cameraRig.RawCurrentZoomDistance);

            // Calculate actual zoom change after clamping
            zoomChange = cameraRig.CurrentZoomDistance / prevZoomDist;

            // First get floor position of middle of gesture
            Vector2 averageScreenPos = (pinch.touch1.currentPosition + pinch.touch2.currentPosition) * 0.5f;
            Vector3 worldPos         = cameraRig.GetRaycastWorldPointOnTargetSurface(averageScreenPos, Vector3.zero);
            // Vector from our current look pos to this point
            Vector3 offsetValue = worldPos - cameraRig.LookPosition;

            // Pan towards or away from our zoom center
            PanCamera(offsetValue * (1 - zoomChange));
        }