Страница 1 из 1

Touch.deltaPosition работает не корректно

СообщениеДобавлено: 09 янв 2021, 17:53
delf.in
Всем привет!
Пытаюсь двигать менюшку тачем через touch.deltaPosition.y в заданном диапазоне.
При первом запуске приложения на андроиде все работает отлично, меню ездит точно за пальцем. Но если закрыть приложение и запустить повторно, то скорость движения меню гораздо меньше и заметно отстает от пальца.
Пробовал запускать на планшете, там все ок.
Второй день уже голову ломаю.

Синтаксис:
Используется csharp
    void Update()
    {
        if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved && pressed)
        {
            float touch = Input.GetTouch(0).deltaPosition.y;
            rectTransform.anchoredPosition = new Vector2(0f, yPos);
            yPos += touch;
            yPos = Mathf.Clamp(yPos, MinPos, MaxPos);
        }
 


Есть мысли в чем может быть проблема?

Re: Touch.deltaPosition работает не корректно

СообщениеДобавлено: 09 янв 2021, 20:37
Alkos26Rus
Скорей всего потому что не учитываешь Time.deltaTime.
Синтаксис:
Используется csharp
        if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved && pressed)
        {
            float touch = Input.GetTouch(0).deltaPosition.y;
            rectTransform.anchoredPosition = new Vector2(0f, yPos);
            yPos += touch * Time.deltaTime * 100;
            yPos = Mathf.Clamp(yPos, MinPos, MaxPos);
        }
 


умножение на 100 это я примерно взял, это если от 60фпс отталкиваться

Re: Touch.deltaPosition работает не корректно

СообщениеДобавлено: 09 янв 2021, 22:45
delf.in
Попробовал, в моем случае подошел множитель 30, но не сработало(( Проблема осталась.
UPD: множитель 30 подошел для первого запуска приложения. На втором запуске менюшка опять отстает от пальца.
На планшете сработало одинаково в обоих запусках.
Может проблема в телефоне, но все равно странно все это...

Re: Touch.deltaPosition работает не корректно

СообщениеДобавлено: 09 янв 2021, 23:23
Alex5
Android не умеет "закрывать приложение" корректно. Разве что через настройки можно его по настоящему закрыть.
А так, может в фоне ещё что работает. В "закрытом приложении". Настройки меняет, например.

Re: Touch.deltaPosition работает не корректно

СообщениеДобавлено: 22 фев 2021, 17:53
Alkos26Rus
Тоже понадобилось прокручивать некоторые элементы GUI пальцем. И тоже столкнулся с такой же проблемой. Эту проблему впринципе удалось решить таким образом и вроде прокрутка точно совпадает с положением пальца.
Синтаксис:
Используется csharp
Vector2 delta = touch.deltaPosition * GetTouchDeltaTime(touch);

private float GetTouchDeltaTime(Touch _touch){
if(_touch.deltaTime > 0)return Time.deltaTime/_touch.deltaTime;
else return 1;
}
 


Но вот какая еще проблема с этим появилась, так как я эту прокрутку использую в обычном старом добром GUI, то елементы внутри например ScrollView которые могут нажиматься, нажимаются после завершения прокрутки. Например кнпка GUI.Button нажимается. Я понимаю что при нажатии, палец находился над кнопкой и после прокрутки всех элементов, когда палец отпущен то он так же находится над кнопкой и поэтому срабатывает нажатие, вот в этом и вопрос как этого избежать, может кто то знает? В идеале нужно избежать не только события нажатия кнопки но и визуального эффекта который происходит при нажатии. Кто знает как это сделать?