ピンチによる拡大

確認済のバージョン: 4.3

-

難易度: 初級

ここでは、モバイル端末のマルチタッチスクリーンを使って、ズームイン/アウトを行う基本的なピンチについて学びます。

ピンチによる拡大

初級 Mobile & Touch

PinchZoom

Code snippet

using UnityEngine;

public class PinchZoom : MonoBehaviour
{
    public float perspectiveZoomSpeed = 0.5f;        // 透視投影モードでの有効視野の変化の速さ
    public float orthoZoomSpeed = 0.5f;        // 平行投影モードでの平行投影サイズの変化の速さ


    void Update()
    {
        // 端末に 2 つのタッチがあるならば... 
        if (Input.touchCount == 2)
        {
            // 両方のタッチを格納します
            Touch touchZero = Input.GetTouch(0);
            Touch touchOne = Input.GetTouch(1);

            // 各タッチの前フレームでの位置をもとめます
            Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
            Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;

            // 各フレームのタッチ間のベクター (距離) の大きさをもとめます
            float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude;
            float touchDeltaMag = (touchZero.position - touchOne.position).magnitude;

            // 各フレーム間の距離の差をもとめます
            float deltaMagnitudeDiff = prevTouchDeltaMag - touchDeltaMag;

            // カメラが平行投影ならば... 
            if (camera.isOrthoGraphic)
            {
                // ... タッチ間の距離の変化に基づいて平行投影サイズを変更します
                camera.orthographicSize += deltaMagnitudeDiff * orthoZoomSpeed;

                // 平行投影サイズが決して 0 未満にならないように気を付けてください
                camera.orthographicSize = Mathf.Max(camera.orthographicSize, 0.1f);
            }
            else
            {
                // そうでない場合は、タッチ間の距離の変化に基づいて有効視野を変更します
                camera.fieldOfView += deltaMagnitudeDiff * perspectiveZoomSpeed;

                // 有効視野を 0 から 180 の間に固定するように気を付けてください
                camera.fieldOfView = Mathf.Clamp(camera.fieldOfView, 0.1f, 179.9f);
            }
        }
    }
}
#pragma strict

public var perspectiveZoomSpeed : float = 0.5f;        //透視投影モードでの有効視野の変化の速さ
public var orthoZoomSpeed : float = 0.5f;        // 平行投影モードでの平行投影サイズの変化の速さ


function Update()
{
    // 端末に 2 つのタッチがあるならば... 
    if (Input.touchCount == 2)
    {
        // 両方のタッチを格納します
        var touchZero = Input.GetTouch(0);
        var touchOne = Input.GetTouch(1);

        // 各タッチの前フレームでの位置をもとめます
        var touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
        var touchOnePrevPos = touchOne.position - touchOne.deltaPosition;

        // 各フレームのタッチ間のベクター (距離) の大きさをもとめます
        var prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude;
        var touchDeltaMag = (touchZero.position - touchOne.position).magnitude;

        // 各フレーム間の距離の差をもとめます
        var deltaMagnitudeDiff = prevTouchDeltaMag - touchDeltaMag;

        // カメラが平行投影ならば...
        if (camera.isOrthoGraphic)
        {
            // ...タッチ間の距離の変化に基づいて平行投影サイズを変更します
            camera.orthographicSize += deltaMagnitudeDiff * orthoZoomSpeed;

            // 平行投影サイズが決して 0 未満にならないように気を付けてください
            camera.orthographicSize = Mathf.Max(camera.orthographicSize, 0.1f);
        }
        else
        {
            // そうでない場合は、タッチ間の距離の変化に基づいて有効視野を変更します
            camera.fieldOfView += deltaMagnitudeDiff * perspectiveZoomSpeed;

            // 有効視野を 0 から 180 の間に固定するように気を付けてください
            camera.fieldOfView = Mathf.Clamp(camera.fieldOfView, 0.1f, 179.9f);
        }
    }
}
import UnityEngine


public class PinchZoom(MonoBehaviour):

    public perspectiveZoomSpeed as single = 0.5F

    // 透視投影モードでの有効視野の変化の速さ
    public orthoZoomSpeed as single = 0.5F

    // 平行投影モードでの平行投影サイズの変化の速さ
    
    private def Update():
        // 端末に 2 つのタッチがあるならば...
        if Input.touchCount == 2:

            // 両方のタッチを格納します
            touchZero as Touch = Input.GetTouch(0)
            touchOne as Touch = Input.GetTouch(1)
            
            // 各タッチの前フレームでの位置をもとめます
            touchZeroPrevPos as Vector2 = (touchZero.position - touchZero.deltaPosition)
            touchOnePrevPos as Vector2 = (touchOne.position - touchOne.deltaPosition)
            
            // 各フレームのタッチ間のベクター (距離) の大きさをもとめます
            prevTouchDeltaMag as single = (touchZeroPrevPos - touchOnePrevPos).magnitude
            touchDeltaMag as single = (touchZero.position - touchOne.position).magnitude
            
            // 各フレーム間の距離の差をもとめます
            deltaMagnitudeDiff as single = (prevTouchDeltaMag - touchDeltaMag)
            
            // カメラが平行投影ならば...
            if camera.isOrthoGraphic:
                // ...タッチ間の距離の変化に基づいて平行投影サイズを変更します
                camera.orthographicSize += (deltaMagnitudeDiff * orthoZoomSpeed)
                
                // 平行投影サイズが決して 0 未満にならないように気を付けてください
                camera.orthographicSize = Mathf.Max(camera.orthographicSize, 0.1F)
            else:
                // そうでない場合は、タッチ間の距離の変化に基づいて有効視野を変更します
                camera.fieldOfView += (deltaMagnitudeDiff * perspectiveZoomSpeed)
                
                // 有効視野を 0 から 180 の間に固定するように気を付けてください
                camera.fieldOfView = Mathf.Clamp(camera.fieldOfView, 0.10000000149F, 179.9F)

関連するチュートリアル