반응형
두손가락이 다른 곳에 쓰여야 해서 불가피하게 세손가락 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 |