Прокрутка пальцем, ложное нажатие

Общие вопросы о Unity3D

Прокрутка пальцем, ложное нажатие

Сообщение Alkos26Rus 18 апр 2021, 22:41

Есть проблема со старым интерфейсом. Конкретно возьмем GUI.BeginScrollView. Он естественно не прокручиваются пальцем по экрану, только если двигать сам ползунок. Но проблема даже не в этом, прокрутку пальцем я реализовал, но вот элементы которые находятся внутри него(кнопки GUI.Button), срабатывают на нажатие во время прокрутки. Логика понятна, нажал на кнопку, прокрутил ScrollView и при убирании пальца, кнопка фиксирует нажатие. Кто знает как от этого избавиться? Я знаю что лучше использовать UI, но проект довольно большой и переводить его на UI очень долго. Так же я в принципе знаю как решить эту проблему если отслеживать нажатие по тачу в пределах Rect, не используя if(GUI.Button, но мне интересно неужели нет нормальных вариантов это сделать, без костылей, да и как до появления UI можно было прокручивать пальцем элементы не нажимая на них.

Для примера, использую банальный GUI.BeginScrollView и GUI.Button, нужно как то сбросить событие нажатия кнопки, если началась прокрутка.
Синтаксис:
Используется csharp
private Vector2 scrollPosition;
private Vector2 touchDelta;
public Rect rect;

private void Update(){
touchDelta = IsMoved(rect);
if(touchDelta.y != 0)scrollPosition.y += touchDelta.y;
}

public Vector2 IsMoved(Rect _rect){
foreach(Touch touch in Input.touches) {
Vector2 touchPosition = touch.position;
touchPosition.y = Screen.height - touchPosition.y;

if(_rect.Contains(touchPosition))
if(touch.phase == TouchPhase.Moved)return touch.deltaPosition * GetTouchDeltaTime(touch);

}

return Vector2.zero;
}

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



void OnGUI() {
scrollPosition = GUI.BeginScrollView(new Rect (0, 0, 100, 100), scrollPosition, new Rect (0, 0, 100, 100));

if(GUI.Button (new Rect (0, 0, 20, 10), "")){

}

GUI.EndScrollView ();
}
 
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Прокрутка пальцем, ложное нажатие

Сообщение 1max1 18 апр 2021, 23:38

Если ты можешь отловить прокрутку, то просто оберни код кнопки в булевую переменную или вовсе выключи копки https://docs.unity3d.com/ScriptReferenc ... abled.html
Синтаксис:
Используется csharp
if (прокрутка)
    enabled = false;
кнопки
enabled = true;
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Прокрутка пальцем, ложное нажатие

Сообщение Alkos26Rus 19 апр 2021, 00:28

1max1 писал(а):Если ты можешь отловить прокрутку, то просто оберни код кнопки в булевую переменную или вовсе выключи копки https://docs.unity3d.com/ScriptReferenc ... abled.html
Синтаксис:
Используется csharp
if (прокрутка)
    enabled = false;
кнопки
enabled = true;

Спасибо, то что нужно!!! Если с событием нажатия кнопки я как то мог решить проблему, но вот визуальное изменение кнопки при прокрутки я не мог победить. Поэтому GUI.enabled это то что нужно.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва


Вернуться в Общие вопросы

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

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