/// <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)); }