Эээх - где вы были раньше с этим ассетом?
Сейчас мне уже проще самому такую программу написать нежели в чужой разбираться.
И да, я так не обнаружил в примерах мой случай. Может плохо искал?
Левш@ писал(а):Ну тогда вам уже правильно написали выше:
Свайп - изменение положения середины между тачами.
Зум - растояние между тачами.
Нет - тут нет ответа на вопрос как их различить.
Вот часть кода отвечающая за обработку касания двумя пальцами:
(определение того что сейчас зумм или свап определяется изменением расстояния между пальцами
на критическую величину zoomshift: if (Math.Abs(tap2FingerCurrentZoom - tap2FingerStartZoom) < zoomShift)
Как вы понимаете код работает некорректно и я спрашиваю сталкивался ли кто с подобной реализацией.
Используется csharp
if (finger2 && Input.touchCount == 2)
{
touch = Input.touches[0];
touch1 = Input.touches[1];
if (touch1.phase == TouchPhase.Began)
{
tap2FingerStartPos = (touch.position + touch1.position) * 0.5f;
tap2FingerStartZoom = Vector2.Distance(touch.position, touch1.position);
Messenger<Vector2>.Broadcast(EVENTS.TapStart2Finger, tap2FingerStartPos);
}
if (touch.phase == TouchPhase.Moved || touch1.phase == TouchPhase.Moved)
{
tap2FingerCurrentZoom = Vector2.Distance(touch.position, touch1.position);
tap2FingerCurrentPosition = (touch.position + touch1.position) * 0.5f;
if (Math.Abs(tap2FingerCurrentZoom - tap2FingerStartZoom) < zoomShift)
{
if (is1FingerWasActive || is3FingerWasActive)
{
tap2FingerStartPos = (touch.position + touch1.position) * 0.5f;
tap2FingerStartZoom = Vector2.Distance(touch.position, touch1.position); ResetFingers();
}
displasement2Finger = (touch.deltaPosition + touch1.deltaPosition) * 0.5f;
if (Mathf.Abs(displasement2Finger.y) < Mathf.Abs(displasement2Finger.x))
{
if (is2FingerWasVertical || is2FingerWasZoom)
{
tap2FingerStartPos = (touch.position + touch1.position) * 0.5f;
tap2FingerStartZoom = Vector2.Distance(touch.position, touch1.position);
ResetFingers();
}
else if (finger2Horizontal)
{
displasement2Finger.y = 0;
Messenger<Vector2>.Broadcast(EVENTS.TapHorisontalMove2Finger, displasement2Finger);
is2FingerWasHorizontal = true;
}
}
else
{
if (is2FingerWasHorizontal || is2FingerWasZoom)
{
tap2FingerStartPos = (touch.position + touch1.position) * 0.5f;
tap2FingerStartZoom = Vector2.Distance(touch.position, touch1.position);
ResetFingers();
}
else if (finger2Vertical)
{
displasement2Finger.x = 0;
Messenger<Vector2>.Broadcast(EVENTS.TapVerticalMove2Finger, displasement2Finger);
is2FingerWasVertical = true;
}
}
}
if (finger2Zoom && Math.Abs(tap2FingerCurrentZoom - tap2FingerStartZoom) > zoomShift)
{
if (is2FingerWasVertical || is2FingerWasHorizontal)
{
tap2FingerStartPos = (touch.position + touch1.position) * 0.5f;
tap2FingerStartZoom = Vector2.Distance(touch.position, touch1.position);
ResetFingers();
}
float disp = Math.Abs(touch.deltaPosition.magnitude) + Math.Abs(touch1.deltaPosition.magnitude);
Messenger<float>.Broadcast(EVENTS.Tap2FingerZOOM, disp * 0.001f);
//tap2FingerStartZoom = tap2FingerCurrentZoom;
is2FingerWasZoom = true;
}
}
}
}