Pan Ortho Camera RTS в стиле Unity - PullRequest
       43

Pan Ortho Camera RTS в стиле Unity

0 голосов
/ 27 февраля 2020

Я использую базовый 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

...