Инерция камеры при свайпе

Программирование для iPhone & Android

Инерция камеры при свайпе

Сообщение SteelbeaR 02 дек 2019, 20:15

Доброго времени суток, коллеги! :-h

Реализовываю полет камеры над уровнем по свайпу игрока (для обзора локации). Для этого отслеживаю направление движения пальца после нажатия на экран и перемещаю камеру в этом направлении по глобальным координатам. Так же использую ограничение, чтобы камера не выходила за рамки сцены.
Вот такой код у меня получился на C#:

Синтаксис:
Используется csharp
using UnityEngine;

public class CamScroller : MonoBehaviour
{
    public float scrollSpeed;
    public float xMin, xMax, zMin, zMax;

    void Update()
    {
        if (Input.touchCount > 0)
            Scroller();
    }

    void Scroller()
    {
        Vector2 delta = Input.GetTouch(0).deltaPosition;

        transform.Translate(-delta.x * Time.deltaTime * scrollSpeed, 0, -delta.y * Time.deltaTime * scrollSpeed, Space.World);
        transform.position = new Vector3(Mathf.Clamp(transform.position.x, xMin, xMax), transform.position.y, Mathf.Clamp(transform.position.z, zMin, zMax));
    }
}
 


Далее я хочу добавить:
1. Инерцию движения камере после того, как игрок отпустит палец (продолжить движение камеры в заданном свайпом направлении с плавным замедлением скорости)
2. "Отпружинивание" камеры немного назад при достижении заданных лимитов (границ локации).

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

P.S. Пробовал использовать Vector3.Lerp в методе "Scroller", но видимых результатов не получил, и (что логично) он прерывается после того, как игрок отрывает палец от экрана.
Экспериментировал с Rigidbody2D, но так же безрезультатно (иначе бы сейчас этой темы здесь не было :)

По поводу "отпружинивания" камеры от границ локации - пробовал реализовать по такой логике:
Если позиция камеры >= заданному лимиту, то переместить камеру на позицию "лимит - отступ"
В результате получил "дрожание" камеры на границах сцены (позиция камеры одновременно пытается переместиться на отступ от лимита и, как только становиться < лимита, снова пытается идти в сторону свайпа каждый кадр)
Аватара пользователя
SteelbeaR
UNец
 
Сообщения: 2
Зарегистрирован: 01 дек 2019, 23:33

Re: Инерция камеры при свайпе

Сообщение 1max1 02 дек 2019, 21:11

Не знаю, будет работать или нет, проводил тесты в своей извращенной фантазии))

Синтаксис:
Используется csharp
public class CamScroller : MonoBehaviour
{
    public float scrollSpeed;
    public float camMoveSpeed = 5.0f;
    public float bounceOffset = 7.0f;
    public float xMin, xMax, zMin, zMax;

    Vector3 newPosition = Vector3.zero;

    void Update()
    {
        if (Input.touchCount > 0)
        {
            var touch = Input.GetTouch(0);

            switch (touch.phase)
            {
                case TouchPhase.Began:
                    newPosition = transform.position;
                    break;

                case TouchPhase.Moved:
                    var delta = touch.deltaPosition * scrollSpeed;
                    newPosition.x -= delta.x;
                    newPosition.z -= delta.y;
                    newPosition.x = Mathf.Clamp(newPosition.x, xMin - bounceOffset, xMax + bounceOffset);
                    newPosition.z = Mathf.Clamp(newPosition.z, zMin - bounceOffset, zMax + bounceOffset);
                    break;
            }
        }

        var p = transform.position;

        transform.position = Vector3.Lerp(p, newPosition, camMoveSpeed * Time.deltaTime);

        if (p.x > xMax)
            p.x = xMax - bounceOffset;

        if (p.x < xMin)
            p.x = xMin + bounceOffset;

        if (p.z > zMax)
            p.z = zMax - bounceOffset;

        if (p.z < zMin)
            p.z = zMin + bounceOffset;

        newPosition = p;
    }
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Инерция камеры при свайпе

Сообщение SteelbeaR 02 дек 2019, 21:58

1max1 писал(а):Не знаю, будет работать или нет, проводил тесты в своей извращенной фантазии))


Почти работает! :)
По осям Y и X все как надо. А по минусовым их значениям камера ведет себя неадекватно
Аватара пользователя
SteelbeaR
UNец
 
Сообщения: 2
Зарегистрирован: 01 дек 2019, 23:33


Вернуться в iPhone & Android

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

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