Pinch to Zoom

Revisado con versión: 4.3

-

Dificultad: Principiante

In this video you will learn to make a basic pinch to zoom mechanic using the multitouch inputs of a mobile device.

Pinch to Zoom

Principiante Mobile & Touch

PinchZoom

Code snippet

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
            {
                // Otherwise change the field of view based on the change in distance between the touches.
                camera.fieldOfView += deltaMagnitudeDiff * perspectiveZoomSpeed;

                // Clamp the field of view to make sure it's between 0 and 180.
                camera.fieldOfView = Mathf.Clamp(camera.fieldOfView, 0.1f, 179.9f);
            }
        }
    }
}
#pragma strict

public var perspectiveZoomSpeed : float = 0.5f;        // The rate of change of the field of view in perspective mode.
public var orthoZoomSpeed : float = 0.5f;        // The rate of change of the orthographic size in orthographic mode.


function Update()
{
    // If there are two touches on the device...
    if (Input.touchCount == 2)
    {
        // Store both touches.
        var touchZero = Input.GetTouch(0);
        var touchOne = Input.GetTouch(1);

        // Find the position in the previous frame of each touch.
        var touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
        var touchOnePrevPos = touchOne.position - touchOne.deltaPosition;

        // Find the magnitude of the vector (the distance) between the touches in each frame.
        var prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude;
        var touchDeltaMag = (touchZero.position - touchOne.position).magnitude;

        // Find the difference in the distances between each frame.
        var 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
        {
            // Otherwise change the field of view based on the change in distance between the touches.
            camera.fieldOfView += deltaMagnitudeDiff * perspectiveZoomSpeed;

            // Clamp the field of view to make sure it's between 0 and 180.
            camera.fieldOfView = Mathf.Clamp(camera.fieldOfView, 0.1f, 179.9f);
        }
    }
}
import UnityEngine


public class PinchZoom(MonoBehaviour):

    public perspectiveZoomSpeed as single = 0.5F

    // The rate of change of the field of view in perspective mode.
    public orthoZoomSpeed as single = 0.5F

    // The rate of change of the orthographic size in orthographic mode.
    
    private def Update():
        // If there are two touches on the device...
        if Input.touchCount == 2:
            // Store both touches.
            touchZero as Touch = Input.GetTouch(0)
            touchOne as Touch = Input.GetTouch(1)
            
            // Find the position in the previous frame of each touch.
            touchZeroPrevPos as Vector2 = (touchZero.position - touchZero.deltaPosition)
            touchOnePrevPos as Vector2 = (touchOne.position - touchOne.deltaPosition)
            
            // Find the magnitude of the vector (the distance) between the touches in each frame.
            prevTouchDeltaMag as single = (touchZeroPrevPos - touchOnePrevPos).magnitude
            touchDeltaMag as single = (touchZero.position - touchOne.position).magnitude
            
            // Find the difference in the distances between each frame.
            deltaMagnitudeDiff as single = (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:
                // Otherwise change the field of view based on the change in distance between the touches.
                camera.fieldOfView += (deltaMagnitudeDiff * perspectiveZoomSpeed)
                
                // Clamp the field of view to make sure it's between 0 and 180.
                camera.fieldOfView = Mathf.Clamp(camera.fieldOfView, 0.10000000149F, 179.9F)

Tutoriales relacionados