Created
March 19, 2018 07:48
-
-
Save glebov21/0bf68cf3999059c4cf87d82ee1e4caa0 to your computer and use it in GitHub Desktop.
Pinch zoom unity3d
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
public class PinchZoom : MonoBehaviour | |
{ | |
public float perspectiveZoomSpeed = 0.5f; // The rate of change of the field of view in perspective mode. | |
public float orthoZoomSpeed = 0.5f; // The rate of change of the orthographic size in orthographic mode. | |
void Update() | |
{ | |
// If there are two touches on the device... | |
if (Input.touchCount == 2) | |
{ | |
// Store both touches. | |
Touch touchZero = Input.GetTouch(0); | |
Touch touchOne = Input.GetTouch(1); | |
// Find the position in the previous frame of each touch. | |
Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition; | |
Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition; | |
// Find the magnitude of the vector (the distance) between the touches in each frame. | |
float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude; | |
float touchDeltaMag = (touchZero.position - touchOne.position).magnitude; | |
// Find the difference in the distances between each frame. | |
float deltaMagnitudeDiff = prevTouchDeltaMag - touchDeltaMag; | |
// If the camera is orthographic... | |
if (camera.isOrthoGraphic) | |
{ | |
// ... change the orthographic size based on the change in distance between the touches. | |
camera.orthographicSize += deltaMagnitudeDiff * orthoZoomSpeed; | |
// Make sure the orthographic size never drops below zero. | |
camera.orthographicSize = Mathf.Max(camera.orthographicSize, 0.1f); | |
} | |
else | |
{ | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment