2014-09-03 3 views
4

완벽한 핀치 줌 (유니티 3D)로 만들려면 : 중심 수평면 :나는 앞으로 함께 카메라를 이동하여 유니티에서 완벽한 핀치 줌을 만드는 방법에 대한 해결책을 찾고 있어요

설정을 모든 Game 객체의 출처. 원점을 보도록 45도 각도로 내려다 보면서 (10,10,10) 옵셋 된 원근 카메라 (원점을 기준으로 45도 회전하여이를 달성) .

내가 무엇을 필요로하는지 : 두 손가락을 화면에 올려 놓으면 두 개의 GameObject를 터치하고 있는데 손가락 아래의 화면 좌표가 특정 세계 좌표와 일치합니다. 핀치 동작 (두 손가락 또는 한 손가락 만 움직이면서)을 할 때 새로운 화면 좌표가 전체 상호 작용의 시작 부분에서 손가락 아래에 있었던 것과 동일한 좌표로 일치하게하고 싶습니다. 그래서 더 쉽게 단순화하려면 - 두 손가락으로 화면을 터치 할 때마다 손가락 아래의 화면 좌표에 해당하는 세계 좌표를 항상 손가락 아래에 두어야합니다 (오차가 매우 작음).

내가 찾고있는이 완벽한 줌의 예는 Supercell의 모바일 게임 Boom Beach에서 볼 수 있습니다.

나는 앞으로 벡터를 따라 카메라를 움직여서 위치를 조정하려고했지만 꽤 좋은 결과를 얻었지만 거의 항상 내 손가락 아래에서 '미끄러짐'아래있는 GameObjects는 더 이상 존재하지 않는다. 그들 밑에. 이것에 대한 수학적 해결책이 있다면 좋을 것입니다. 그러나 답을 계산할 필요가 있다면 (예를 들어 어떤 검색을 통해) 이것은 완전히 좋습니다.

설정/시나리오가 명확하지 않으면 좀 더 명확하게하기 위해 일부 스케치를 제공 할 수 있습니다.

누군가 나를 도울 수 있기를 바랍니다. :)

답변

0

GameObject를 사용하여 Vector3.distance로 손가락이 어디 있는지 쉽게 파악할 수있는 경우 사용자가 확대/축소 할 때이를 감지하는 시스템을 설정합니다. 그런 다음 Vector3.MoveTowards (카메라 위치, 원하는 위치, 이동 속도)를 사용하여 카메라를 원하는 줌 레벨에 더 가깝게 이동시키는 함수를 만들 것입니다. 여기서 "이동 속도"를 mathf.sqrt (vector3 거리 (카메라 위치, 원하는 위치)); "원하는 위치"에 대해 최대 및 최소 줌 레벨을 나타내는 두 게임 개체 사이의 선분으로 Vector3 (위치)를 설정합니다. 편집 : 그걸로 아주 멋진 카메라 시스템이 있어야합니다.