이 단원에서는 몇 가지 표준 핀치 줌 스타일의
터치 제어에 대해 자세히
살펴보도록 하겠습니다.
카메라에 스크립트를 적용해서
제어해 보겠습니다
씬에서 주 카메라를 선택합니다
그리고 [Add Component] - [New Script]를 클릭해
C# 스크립트를 카메라에 추가합니다
[PinchZoom] 스크립트를 불러올 것입니다
스크립트를 불러오면 [Create]와 [Add]를 클릭합니다
이제 스크립트를 더블 클릭해
열어서 편집할 수 있습니다
클래스의 본문을 제거해
깔끔하게 시작할 수 있도록 합니다
핀치 줌의 원리는 다음과 같습니다
우선 장치에 정확히 터치가 2개인지
확인해야 합니다
그리고 현재와 이전 프레임의
터치간 거리를
파악해야 합니다
터치간 거리가 짧아졌다면
두 터치가 서로 가깝게 이동한 것이므로
줌아웃해야 합니다
마찬가지로 터치간 거리가 길어졌다면
줌인해야 합니다
이 스크립트에서 맨 먼저 해야 할 작업은
일반 float 변수 2개를 생성하는 것입니다
이 변수들을 이용해 줌 속도를
조절할 것입니다
Perspective 및 Orthographic 카메라의
속도를 따로 조절하려면
변수가 2개 필요합니다
이 변수들을
[perspectiveZoomSpeed]와
[orthoZoomSpeed]로 부르기로 합니다
아울러 두 변수에 기본값을 0.5로 부여합니다.
터치 입력이 업데이트 루프와 함께
제때 감지되므로, 업데이트 함수에서
터치 입력을 처리하는 것이 가장 좋습니다.
하지만 장치에 터치가 정확히 2개라면
모든 것을 처리하려 할 것입니다
[Input. touchCount] 속성을 이용해 확인할 수 있습니다
터치가 정확히 2개임을 확인했으므로
이 터치들을 자체 터치 변수에
저장할 수 있습니다
이런 식으로 Input 클래스의 속성에
계속 액세스할 필요가 없습니다
Input 클래스의 [GetTouch] 함수를 이용해
터치에 액세스합니다
터치가 2개뿐이므로
터치 어레이에서 지수 0과 1이 됩니다
그러므로 0과 1을 [GetTouch] 함수로
구문 분석해 이 터치들의 복사본을 확보할 수 있습니다
터치를 확보했으므로
이전 프레임에서 터치의 위치를
파악해야 합니다
터치의 현재 위치를 확인해 델타 위치를
빼면 됩니다
각 프레임의 터치간 거리를 확인하고
해당 정보를 이용해 줌인 또는 줌아웃이 필요한지
결정하려고 합니다
각 프레임의 터치간 거리를 확인하려면
하나의 터치 위치에서
다른 하나의 터치 위치를 빼서 둘 사이의 벡터를 구합니다.
그런 다음 그 벡터를 통해 크기를 확인합니다
벡터 공제값을 괄호에 넣고
[. operator]를 사용해 특정 단계에서
이 작업을 수행할 수 있습니다
델타라는 용어를 사용하는 것은
델타가 두 데이터간 변화를 의미하기 때문입니다
각 프레임의 터치간 거리를 계산했으므로
이제 그 거리 차이를
확인할 수 있습니다
이번에는 빼기 순서가 중요합니다
이전 프레임의 거리에서 현재 프레임의
터치간 거리를 빼겠습니다
현재 프레임의 거리가
이전 프레임의 거리보다 크다면
그 값은 - 가 됩니다
이것은 손가락을 벌린 상태라는 의미입니다
손가락을 벌리면
카메라의 시야가 좁아지고
직교 크기가 작아지면서
줌인됩니다
이 조건에서 시야나 직교 크기를
줄이려고 하므로
이것은 두 값을 빼는 정확한 방법입니다
하지만 카메라 속성을
변경하기 전에
카메라가 [직교 모드] 또는 [원근 모드]인지
확인해야 합니다
[직교 모드]라면 직교 줌 속도를 곱한
거리 변화로 카메라의 직교 크기를
조정할 수 있습니다
또한 카메라의 직교 크기가 0 미만이 되지 않게
할 것입니다
0 미만이면 이미지가 반전됩니다
이를 막기 위해 [Mathf] 클래스의
[Max] 함수를 이용할 것입니다
그러면 주어진 매개변수 중
가장 큰 값을 가져옵니다
카메라의 직교 크기에 이 함수를 부여하고
그 값을 [0.1]로 설정합니다
이런 식으로 크기가 0.1 미만이면
0.1로 설정할 수 있습니다
이제 카메라가 [직교 모드]가 아니라
[원근 모드]임을 확인하고
시야를 변경합니다
같은 양으로 시야를 조절할 수 있지만
원근 줌 속도를 이용합니다
다시 시야를 제한하려고 합니다
하지만 시야는 각도를 의미하므로
0과 180 사이에 고정해야 합니다
이를 위해 [Mathf] 클래스의 [Clamp] 함수를 이용합니다
값은 3개가 필요합니다
우선 원하는 고정값이 있어야 하고,
그 다음에는 최소 허용값과
최대 허용값이 필요합니다
설정값은 카메라의 시야이며
그 값을 0.1과 179.9 사이에
두려고 합니다
자체 핀치 줌 시스템을 구성할 때
여러분은 보다 적합한 시야와 직교 크기
제한을 선택하려고 할 것입니다
여기에서는 스크립트에 표시된 제한값을 이용하고 있습니다
이 값들이 합당한 결과물을 만들 수 있는
한계값이기 때문이죠
스크립트를 모두 살펴보았으므로 이제 테스트를 해보겠습니다
장치가 준비되었고 테스트 설정이 완료된 상태라고
가정합니다
방법은 해당 장치의 설명서를
참조하십시오
이제 [File] - [Build Settings]로 가서
이 프로젝트를 빌드할 것입니다
현재의 씬을 빌드에 추가해야 합니다
아직 씬을 저장하지 않았다면
저장하라는 프롬프트가 표시될 것입니다
그런 다음 [Build And Run]을 클릭합니다
보시다시피 손가락을 모으면
카메라가 줌아웃되고
벌리면 줌인됩니다.