📷

【Unity】スクリプトでカメラのズームインアウトを実装する方法(PCとスマホ)

2021/04/25に公開

今回スマホとPCのスクロールによるズームの方法を紹介します。

PCのマウススクロールでズームインアウト

カメラのz軸をマウススクロールによって距離を変化させるスクリプト

    float MouseZoomSpeed = 15.0f;
    private Camera cam;

    void Update()
    {
        CameraZoom();
    }

    void CameraZoom()
    {
        float scroll = Input.GetAxis("Mouse ScrollWheel");
        Zoom(scroll, MouseZoomSpeed);
    }


    void Zoom(float deltaMagnitudeDiff, float speed)
    {
        float z = cam.transform.localPosition.z + deltaMagnitudeDiff * speed;
        cam.transform.localPosition = new Vector3(cam.transform.localPosition.x, cam.transform.localPosition.y, z););
    }

カメラのfield of view(拡大率)をマウススクロールによって変化させるスクリプト

  float MouseZoomSpeed = 15.0f;
  float ZoomMinBound = 0.1f;
  float ZoomMaxBound = 179.9f;
  private Camera cam;

    void Update()
    {
        CameraZoom();
    }

    void CameraZoom()
    {
        float scroll = Input.GetAxis("Mouse ScrollWheel");
        Zoom(scroll, MouseZoomSpeed);
    }


    void Zoom(float deltaMagnitudeDiff, float speed)
    {
        cam.fieldOfView += deltaMagnitudeDiff * speed;
        cam.fieldOfView = Mathf.Clamp(cam.fieldOfView, ZoomMinBound, ZoomMaxBound);
    }

スマホでピンチイン、ピンチアウト

https://youtu.be/ocyntqwW9Ng
またスマホでピンチイン、ピンチアウトを実装したい時は以下をCameraZoom()の部分を変更

    void CameraZoom()
    {
        float scroll = Input.GetAxis("Mouse ScrollWheel");
        Zoom(scroll, MouseZoomSpeed);
    }

void CameraZoom()
    {
   if (Input.touchCount == 2)
        {
            // get current touch positions
            Touch tZero = Input.GetTouch(0);
            Touch tOne = Input.GetTouch(1);
            // get touch position from the previous frame
            Vector2 tZeroPrevious = tZero.position - tZero.deltaPosition;
            Vector2 tOnePrevious = tOne.position - tOne.deltaPosition;

            float oldTouchDistance = Vector2.Distance(tZeroPrevious, tOnePrevious);
            float currentTouchDistance = Vector2.Distance(tZero.position, tOne.position);

            // get offset value
            float deltaDistance = oldTouchDistance - currentTouchDistance;
            Zoom(deltaDistance, TouchZoomSpeed);
        }
  }

記事は以上です。お疲れ様でした😌

Discussion