Unity/Unity 리서치

Pinch Zoom (두손가락, 세손가락)

lipnus 2021. 6. 11. 01:48
반응형

두손가락이 다른 곳에 쓰여야 해서 불가피하게 세손가락 Pinch zoom이 필요.

 

① 세 손가락이 만드는 삼각형의 넓이 변화를 이용.
② 외적을 이용하여 삼각형 넓이 구함 (다른 방법을 써도 무관)

 

 

외적 공식

 

삼각형의 넓이

 

세손가락 Pinch Zoom

        private float GetPinchZoomValue()
        {
            float deltaMagnitudeDiff = 0f; 

            // 세손가락, 삼각형의 넓이 변화 이용
            if (Input.touchCount == 3)
            {
                Touch[] touch = new Touch[3];
                touch[0] = Input.GetTouch(0);
                touch[1] = Input.GetTouch(1);
                touch[2] = Input.GetTouch(2);

                Vector2[] touchPrevPos = new Vector2[3];
                touchPrevPos[0] = touch[0].position - touch[0].deltaPosition;
                touchPrevPos[1] = touch[1].position - touch[1].deltaPosition;
                touchPrevPos[2] = touch[2].position - touch[2].deltaPosition;

                Vector2 prevVectorOne = touchPrevPos[1] - touchPrevPos[0];
                Vector2 prevVectorTwo = touchPrevPos[2] - touchPrevPos[0];
                float prevArea = Mathf.Abs(Vector3.Cross(prevVectorOne, prevVectorTwo).magnitude);

                Vector2 vectorOne = touch[1].position - touch[0].position;
                Vector2 vectorTwo = touch[2].position - touch[0].position;
                float nowArea = Mathf.Abs(Vector3.Cross(vectorOne, vectorTwo).magnitude);

                deltaMagnitudeDiff = prevArea - nowArea;
            }

            return deltaMagnitudeDiff;
        }

 

 

두손가락 Pinch Zoom

        private float getPichZoomValue()
        {
            float deltaMagnitudeDiff = 0f; 

            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;

                deltaMagnitudeDiff = prevTouchDeltaMag - touchDeltaMag;
            }
            return deltaMagnitudeDiff;
        }
반응형

'Unity > Unity 리서치' 카테고리의 다른 글

Unity 애니매이션  (0) 2021.06.26
Android Build시 프레임드랍 문제  (0) 2021.06.11
터치 드래그로 카메라 이동 (한손가락, 두손가락)  (0) 2021.06.11
Time.deltaTime  (0) 2021.06.11
Camera Panning  (0) 2021.06.10