Как сделать свайп плавнее

Здраствуйте! У меня есть объект, который нужно перемещать свайпом вверх-вниз(по y). Проблема заключается в том - что объект дёргается(После того, как я один раз свайп использовал(обьект остался там, где должен), второй раз когда я использую свайп - он дёргается, словно перемещается на какие-то координаты, возможно начальные). Эту тему с тапами, свайпами и т.п я совсем не понимаю. Как мне всё же сделать так, что бы оно не дёргалось?

Вот код:

[SerializeField] private Transform textTransform;
[SerializeField] private Vector2 startPos;
[SerializeField] private Vector2 directionPos;

private void Update()
{
    if (Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);
        
        switch (touch.phase)
        {
            case TouchPhase.Began: // Начало
                startPos.y = touch.position.y; // Первый тап
                break;

            case TouchPhase.Moved: // Движение
                directionPos.y = touch.position.y - startPos.y;
                break;
        }
        textTransform.localPosition = new Vector2(0, directionPos.y); // Перемещение
    }
}

Ответы (2 шт):

Автор решения: FiolDoll
[SerializeField] private Transform textTransform;
[SerializeField] private Vector2 startPos;
[SerializeField] private Vector2 directionPos;

private void Update()
{
    if (Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);
        
        switch (touch.phase)
        {
            case TouchPhase.Began: // Начало
                startPos.y = textTransform.position.y; // Первый тап
                break;

            case TouchPhase.Moved: // Движение
                directionPos.y = touch.position.y - startPos.y;
                break;
        }
        textTransform.localPosition = new Vector2(0, directionPos.y); // Перемещение
    }
}
→ Ссылка
Автор решения: aepot

Я бы сделал расчет смещения объекта относительно его начальной позиции, а не начальной позиции тача:

private float touchOffset;

private void Update()
{
    if (Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);
        
        switch (touch.phase)
        {
            case TouchPhase.Began: 
                touchOffset = touch.position.y - textTransform.localPosition.y;
                break;
            case TouchPhase.Moved:
                textTransform.localPosition = new Vector2(0, touch.position.y - touchOffset);
                break;
        }
    }
}
→ Ссылка