Mirza Zeeshan
Mirza Zeeshan

Reputation: 99

How to scale in and out objects individual with pinch zoom

I find this script for pinch zoom but this is for camera zoom in and out please tell me how it can works for objects and more important thing is for individual objects it means if i want to scale cube then only cube is scaled nothing else at the same time. and if sphere then only sphere thanks. here's code:

using UnityEngine;
{
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);
        }
    }
}
}

Upvotes: 1

Views: 8770

Answers (1)

Łukasz Motyczka
Łukasz Motyczka

Reputation: 1199

Ok, so I cannot test it properly so there maybe some bugs but here's general idea for a code:

IMPORTANT: object has to have collider attached - it will not work without it

using UnityEngine;
using System.Collections;
public class ObjectScalling : MonoBehaviour {

private GameObject selectedObject;    
//public GameObject gameobject;
// Update is called once per frame
void Update () {

    if ( Input.touchCount == 0 )
    {
        Touch touch = Input.touches[0];
        Ray ray = Camera.main.ScreenPointToRay(touch.position);
        RaycastHit hit;

        if ( Physics.Raycast(ray, out hit, 100f ) )
        {
            selectedObject = hit.collider.gameObject;
        }
    }
    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;

        selectedObject.transform.localScale = new Vector3(deltaMagnitudeDiff , deltaMagnitudeDiff , deltaMagnitudeDiff);

    }
}
}

It probably contains some bugs, but generally you may start to work on that :) Of course everything goes into your Update() except this line: deltaMagnitudeDiff

Upvotes: 1

Related Questions