Я использую базовый c скрипт панорамирования, который я нашел на YouTube для мобильной игры для панорамирования и масштабирования камеры. Я просто хочу перетащить его по экрану вокруг моей карты. Вот код, который отлично работает на первый взгляд:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour
{
public bool userMoveable = true;
private Vector3 touchStart;
public float minZoom = 10;
public float maxZoom = 25;
public float panSpeed = 0.05f;
private Vector3 lastPosition;
//TODO clamp to 4 corners of the level
//TODO add/smooth lerp?
private void LateUpdate()
{
if (Input.GetMouseButtonDown(0))
{
touchStart = Camera.main.ScreenToWorldPoint(Input.mousePosition);
}
if (Input.touchCount == 2)
{
Touch touchZero = Input.GetTouch(0);
Touch touchOne = Input.GetTouch(1);
Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;
float prevMagnitude = (touchZeroPrevPos - touchOnePrevPos).magnitude;
float currentMagnitude = (touchZero.position - touchOne.position).magnitude;
float difference = currentMagnitude - prevMagnitude;
Zoom(difference * 0.01f);
} else
if (Input.GetMouseButton(0))
{
var difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - Camera.main.transform.position;
Camera.main.transform.position = touchStart - difference;
}
Zoom(Input.GetAxis("Mouse ScrollWheel") * 5);
}
private void Zoom(float increment)
{
if (Camera.main.orthographic)
{
Camera.main.orthographicSize = Mathf.Clamp(Camera.main.orthographicSize - increment, minZoom, maxZoom);
}
}
}
Проблема, которую я обнаружил, заключается в том, что Камера преобразует положение. Я поворачиваюсь, когда поворачиваюсь вверх или вниз (с помощью мыши). еще не проверял это на устройстве. Это приводит к тому, что ось Y достигает 0 и отрицательных чисел, и начинается отсечение, если я прокручиваю слишком далеко вниз (это не займет много времени). Я могу обойти это, запустив камеру в космосе (около 300), но хотел бы очистить это и как-то зажать ось y. Если я изменю разницу (непосредственно на ноль), скорость, с которой камера перемещается вверх и вниз, уменьшается в геометрической прогрессии. Мысли? * * 1004