В Unity3D могут быть более простые способы - у меня нет никакого опыта - но это звучит как довольно простая проблема масштабирования.
Вам нужно знать следующее:
- Координаты изображения центра изображения
Это вектор (width/2, height/2)
- Координаты экрана центра изображения
Где центр изображения находится наscreen - Коэффициент масштабирования (
1.33f
в этом примере)
Учитывая вышеизложенное, вы можете рассчитать пиксель, к которому вы прикоснулись, с помощью простой математики:
public Vector2Int ScaleTouch(Vector2Int imgCentre, Vector2Int dispCentre, float scale, Vector2Int touch)
{
var x = imgCentre.x + (touch.x - dispCentre.x) * scale;
var y = imgCentre.y + (touch.y - dispCentre.y) * scale;
return Vector2Int.RoundToInt(new Vector2(x, y));
}
Или используя методы из Vector2
и Vector2Int
, вы можете сделать это:
public Vector2Int ScaleTouch(Vector2Int imgCentre, Vector2Int dispCentre, float scale, Vector2Int touch)
{
var offset = Vector2.Scale(touch - dispCentre, new Vector2(scale, scale));
return offset + imgCentre;
}
Оба предполагают, что ваша шкала однородна в x
и y
.Вы можете указать масштабный вектор, если хотите, чтобы он был гибким в отношении масштабирования по разным осям.