Увеличение изображения и перемещение по нему двумя пальцами (мобильное приложение Unity 2d C#)
Делаю мобильное приложение на Unity 2D (С#) под Android. Есть сцена, где пользователь перелистывает изображение кнопками. У меня есть реализация увеличения картинки на весь экран при нажатии на неё. Но после того, как картинка увеличилась, мне нужно, чтобы пользователь мог увеличивать/уменьшать и также двумя пальцами двигаться по ней (как в мобильном ВК).
Я добавил в элемент Image (где у меня хранится изображение) своего Canvas компонент Button, чтобы картинка отслеживала нажатие на неё. После того, как нажимается картинка, она увеличивается. Нажатие на картинку отслеживается в методе:
public void onImageClick()
{
rectTransform = im.GetComponent<RectTransform>();
var bgTransform = bg.GetComponent<RectTransform>();
if (rectTransform.sizeDelta.x < 530)
{
if (rectTransform.sizeDelta.x <= width || rectTransform.sizeDelta.y <= height)
{
imageClicked = true;
bgTransform.position = can.GetComponent<RectTransform>().position;
transparentChange = true;
}
}
else
{
if (rectTransform.sizeDelta.x >= can.GetComponent<RectTransform>().sizeDelta.x || rectTransform.sizeDelta.y >= can.GetComponent<RectTransform>().sizeDelta.y)
{
imageClickedReturn = true;
transparentChangeReturn = true;
}
}
}
Unity:
Поля
private bool transparentChange;
private bool transparentChangeReturn;
private bool imageClicked;
private bool imageClickedReturn;
нужны для того, чтобы в методе Update() отслеживать, увеличилась ли картинка или нет.
Метод Update():
private void Update()
{
if (transparentChange)
{
bg.color = new Color(0, 0, 0, transparentCounter += 0.1f);
if (transparentCounter >= 1)
{
transparentChange = false;
transparentCounter = 1;
}
}
if (transparentChangeReturn)
{
bg.color = new Color(0, 0, 0, transparentCounter -= 0.1f);
if (transparentCounter <= 0)
{
var bgTransform = bg.GetComponent<RectTransform>();
bgTransform.position = new Vector3(13.945f, -511f);
transparentChangeReturn = false;
transparentCounter = 0;
}
}
if (imageClicked)
{
rectTransform.sizeDelta = new Vector2(rectTransform.sizeDelta.x + 10f, rectTransform.sizeDelta.y + 10f);
rectTransform.position = new Vector3(rectTransform.position.x + 11.44f, rectTransform.position.y - 0.77385f);
if (rectTransform.sizeDelta.x >= can.GetComponent<RectTransform>().sizeDelta.x || rectTransform.sizeDelta.y >= can.GetComponent<RectTransform>().sizeDelta.y) imageClicked = false;
}
if (imageClickedReturn)
{
rectTransform.sizeDelta = new Vector2(rectTransform.sizeDelta.x - 10f, rectTransform.sizeDelta.y - 10f);
rectTransform.position = new Vector3(rectTransform.position.x - 11.44f, rectTransform.position.y + 0.77385f);
if (rectTransform.sizeDelta.x <= width || rectTransform.sizeDelta.y <= height) imageClickedReturn = false;
}
if (Input.touchCount == 2)
{
// Store both touches.
Touch touchZero = Input.GetTouch(0);
Touch touchOne = Input.GetTouch(1);
// Find the position in the previous frame of each touch.
Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;
// Find the magnitude of the vector (the distance) between the touches in each frame.
float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude;
float touchDeltaMag = (touchZero.position - touchOne.position).magnitude;
// Find the difference in the distances between each frame.
float deltaMagnitudeDiff = (prevTouchDeltaMag - touchDeltaMag) / 100;
if (zoom.x <= 1 & deltaMagnitudeDiff > 0)
{
deltaMagnitudeDiff = 0;
}
if (zoom.x >= 3 & deltaMagnitudeDiff < 0)
{
deltaMagnitudeDiff = 0;
}
zoom = new Vector3(zoom.x -= deltaMagnitudeDiff, zoom.y -= deltaMagnitudeDiff, 1);
im.transform.localScale = zoom;
im.transform.localScale = zoom;
}
}
Все числа, которые там написаны подсчитаны для того, чтобы картинка увеличивалась до нужного размера, can - это мой канвас.
И теперь самое важное. Как мне со всем этим реализовать зум картинки и передвижение по ней двумя пальцами? В методе Update() есть условие, что если 2 тача, то мы просто зумим, но не двигаемся по картинке. Я нашёл код на одном форуме. Но это позволяет просто увеличивать картинку без возможности передвижения по ней (для рассмотрения деталей, например).
Каким образом я могу сделать так, чтобы только после того, как картинка была увеличена, я мог зумить её и перемещаться по ней?
Сцена при увеличении картинки:


