Как обрабатывать пролистывание сенсорной панели Oculus Gear VR, избегая события касания

У меня есть представление прокрутки, содержащее несколько кнопок в качестве дочерних элементов под панелью содержимого. Иерархия выглядит так:

Я реализовал подобное событие OVRTouchpad.TouchHandler в своем скрипте, прикрепленном к ScrollView:

void Start()
{
    #if OVR && !UNITY_EDITOR
    OVRTouchpad.Create();
    OVRTouchpad.TouchHandler += HandleTouchHandler;
    #endif
}

void HandleTouchHandler (object sender, System.EventArgs e)
{
    OVRTouchpad.TouchArgs touchArgs = (OVRTouchpad.TouchArgs)e;
    if(touchArgs.TouchType == OVRTouchpad.TouchEvent.Left || touchArgs.TouchType == OVRTouchpad.TouchEvent.Up)
    {
        // Code to scroll UP for swipe in directions LEFT/UP
    }
    else if(touchArgs.TouchType == OVRTouchpad.TouchEvent.Right || touchArgs.TouchType == OVRTouchpad.TouchEvent.Down)
    {
        // Code to scroll DOWN for swipe in directions RIGHT/DOWN
    }
}

Проблема:

Поскольку я использую модуль ввода OVR, он обрабатывает Tap ввода, даже если я пытаюсь провести пальцем. Поэтому каждый раз, когда я прокручиваю в любом направлении, глядя на кнопку (дочерний вид прокрутки). Кнопка нажата, и я попадаю в какое-то другое меню. Я не уверен, что это желаемое поведение системы ввода Gear VR. Как я видел в приложении Oculus Home (и других приложениях в магазине), он только прокручивается, не вызывая щелчков по дочернему элементу.

Есть ли способ предотвратить щелчок/касание при обнаружении смахивания?

Любая помощь высоко ценится.


person Umair M    schedule 07.09.2016    source источник


Ответы (1)


Вы пытались сначала вставить оператор IF для обработки триггера singletap?

  if(touchArgs.TouchType == OVRTouchpad.TouchEvent.SingleTap)
  {
     //TODO: Nest IF statements here checking conditions which indicate swipe instead of tap. If nothing further detected, process single tap. 
     //Otherwise continue with swipe direction handling.
  }

Но, как говорится, использование сценария VRInput, упомянутого в этом руководстве, вероятно, будет вашим лучшим выбором, поскольку он также может обрабатывать пролистывания с вводом направления.

https://unity3d.com/learn/tutorials/topics/virtual-reality/interaction-vr

Фрагмент:

public event Action<SwipeDirection> OnSwipe;                // Called every frame passing in the swipe, including if there is no swipe.
person LJ Codes    schedule 19.10.2016
comment
Я сталкиваюсь с проблемой, потому что система событий получает касание так же, как щелчок мышью, если указатель находится на какой-либо кнопке. Я хочу предотвратить это. - person Umair M; 19.10.2016
comment
Либо вы вмешиваетесь в этот триггер крана и обрабатываете его, либо используете другую систему/метод событий. Вход VR определенно выглядит наиболее перспективным для лучшего контроля. Он записывает положение пальца, когда он находится на сенсорной панели, и когда он отпускается, чтобы определить, было ли это смахивание или касание. Так же, как вам нужно. - person LJ Codes; 19.10.2016
comment
Я не могу использовать другую систему событий при работе с пользовательским интерфейсом Unity. Если нет выбора, создайте ручные кнопки с коллайдерами. - person Umair M; 20.10.2016