Есть следующие элементы UI
map_content это большая карта, которая на экране видна лишь частично, её можно двигать по "x" и "y"
На map_content повесил следующий скрипт:
using UnityEngine;
// код собран из разных частей интернета
public class PinchToChangeScaleMap : MonoBehaviour
{
private float initialDistance;
private Vector3 initialScale;
void Update()
{
// scale using pinch involves two touches
// we need to count both the touches, store it somewhere, measure the distance between pinch
// and scale gameobject depending on the pinch distance
// we also need to ignore if the pinch distance is small (cases where two touches are registered accidently)
if (Input.touchCount == 2)
{
var touchZero = Input.GetTouch(0);
var touchOne = Input.GetTouch(1);
// if any one of touchzero or touchOne is cancelled or maybe ended then do nothing
if (touchZero.phase == TouchPhase.Ended || touchZero.phase == TouchPhase.Canceled ||
touchOne.phase == TouchPhase.Ended || touchOne.phase == TouchPhase.Canceled)
{
return; // basically do nothing
}
if (touchZero.phase == TouchPhase.Began || touchOne.phase == TouchPhase.Began)
{
initialDistance = Vector2.Distance(touchZero.position, touchOne.position);
initialScale = gameObject.transform.localScale;
}
else // if touch is moved
{
var currentDistance = Vector2.Distance(touchZero.position, touchOne.position);
//if accidentally touched or pinch movement is very very small
if (Mathf.Approximately(initialDistance, 0))
{
return; // do nothing if it can be ignored where inital distance is very close to zero
}
var factor = currentDistance / initialDistance;
gameObject.transform.localScale = initialScale * factor; // scale multiplied by the factor we calculated
}
}
}
}
Не знаю как это точно объяснить, но попробую.
При увеличении карты, наш экран смещается к центру. То есть, мы в углу увеличиваем карту, а она помимо увеличения приближается к центру.
При отдалении карты, наоборот, отдаляется от центра экран
#жесть