свайп камеры по оси x

Программирование на Юнити.

свайп камеры по оси x

Сообщение MrDmitry 14 апр 2023, 08:36

Делаю свайп камеры, код взял из интернета

Синтаксис:
Используется csharp
public class SwipeCamera : MonoBehaviour
{
    [SerializeField]
    [Header("Скорость перемещения камеры")]
    private float Speed = 5;
    private Vector3 startPos;
    private Camera cam;
    private float targetPos;
    private GameObject[] Wall;
    private float min = 0;
    private float max = 0;

    void Start()
    {
        cam = GetComponent<Camera>();
        Wall = GameObject.FindGameObjectsWithTag("BoundingWall");
        targetPos = transform.position.x;
        if (Wall[0].transform.position.x < 0)
        {
            min = Wall[1].transform.position.x;
            max = Wall[0].transform.position.x;
        }
        else
        {
            min = Wall[1].transform.position.x;
            max = Wall[0].transform.position.x;
        }
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
            startPos = cam.ScreenToWorldPoint(Input.mousePosition);
        else if(Input.GetMouseButton(0))
        {
            float pos = cam.ScreenToWorldPoint(Input.mousePosition).x - startPos.x;
            targetPos = Mathf.Clamp(transform.position.x - pos, min, max);
        }
        transform.position = new Vector3(Mathf.Lerp(transform.position.x, targetPos, Speed * Time.deltaTime), transform.position.y, transform.position.z);
    }
}


min = -18, max = 22

Кликах и смещение мышки, камера стоит на месте.

если изменить поменять min и max местами то камера двигается к max, но не двигается к min

Синтаксис:
Используется csharp
targetPos = Mathf.Clamp(transform.position.x - pos, max, min);


Игра 3D
MrDmitry
UNITрон
 
Сообщения: 223
Зарегистрирован: 05 авг 2017, 17:21

Re: свайп камеры по оси x

Сообщение 1max1 14 апр 2023, 12:17

Синтаксис:
Используется csharp
cam.ScreenToWorldPoint(Input.mousePosition)

В 3д игре это нифига тебе не даст, переделывай))
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: свайп камеры по оси x

Сообщение MrDmitry 14 апр 2023, 13:04

Почему переделывать именно эту строчку?

Camera.ScreenToWorldPoint, преобразует положение мыши в пиксельных координатах в мировое пространство

Что мне и нужно сделать в начале, разве это не так? Или есть какой то другой метод?

ЗЫ свайп нужен только по оси X
MrDmitry
UNITрон
 
Сообщения: 223
Зарегистрирован: 05 авг 2017, 17:21

Re: свайп камеры по оси x

Сообщение 1max1 14 апр 2023, 13:57

В перспективной камере это вернет всегда одно и тоже, вроде как позицию камеры, это только для ортографической. Тебе надо использовать просто Input.mousePosition.
Синтаксис:
Используется csharp
public class SwipeCamera : MonoBehaviour
{
    [SerializeField]
    [Header("Скорость перемещения камеры")]
    private float Speed = 5;

    private Vector3 startPos;
    private Camera cam;
    private float targetPos;
    private GameObject[] Wall;
    private float min = -100;
    private float max = +100;

    void Start()
    {
        cam = GetComponent<Camera>();
        Wall = GameObject.FindGameObjectsWithTag("BoundingWall");
        targetPos = transform.position.x;
        if (Wall[0].transform.position.x < 0)
        {
            min = Wall[1].transform.position.x;
            max = Wall[0].transform.position.x;
        }
        else
        {
            min = Wall[1].transform.position.x;
            max = Wall[0].transform.position.x;
        }
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            startPos = Input.mousePosition;
        }
        else if (Input.GetMouseButton(0))
        {
            float k = 0.1f; // тут что-то свое, чем больше, тем дальше летит

            float deltaX = Input.mousePosition.x - startPos.x;

            targetPos = Mathf.Clamp(transform.position.x + deltaX * k, min, max);
        }

        transform.position = new Vector3(Mathf.Lerp(transform.position.x, targetPos, Speed * Time.deltaTime), transform.position.y, transform.position.z);
    }
}
 
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11