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

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

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

Сообщение delf.in 09 янв 2021, 17:53

Всем привет!
Пытаюсь двигать менюшку тачем через 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);
        }
 


Есть мысли в чем может быть проблема?
delf.in
UNец
 
Сообщения: 2
Зарегистрирован: 06 авг 2018, 22:31

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

Сообщение Alkos26Rus 09 янв 2021, 20:37

Скорей всего потому что не учитываешь 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фпс отталкиваться
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

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

Сообщение delf.in 09 янв 2021, 22:45

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

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

Сообщение Alex5 09 янв 2021, 23:23

Android не умеет "закрывать приложение" корректно. Разве что через настройки можно его по настоящему закрыть.
А так, может в фоне ещё что работает. В "закрытом приложении". Настройки меняет, например.
Linux это просто
Экономика это просто
Forex это просто
Мой канал на YouTube
Аватара пользователя
Alex5
Старожил
 
Сообщения: 507
Зарегистрирован: 22 авг 2019, 17:37

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

Сообщение Alkos26Rus 22 фев 2021, 17:53

Тоже понадобилось прокручивать некоторые элементы 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 нажимается. Я понимаю что при нажатии, палец находился над кнопкой и после прокрутки всех элементов, когда палец отпущен то он так же находится над кнопкой и поэтому срабатывает нажатие, вот в этом и вопрос как этого избежать, может кто то знает? В идеале нужно избежать не только события нажатия кнопки но и визуального эффекта который происходит при нажатии. Кто знает как это сделать?
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва


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

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 11