如何处理Oculus Gear VR触控板上的滑动,避免点击事件

时间:2016-09-07 13:58:31

标签: c# unity3d unity5 oculus gear-vr

我有一个Scroll View,其中包含几个按钮作为内容面板下的子元素。层次结构如下所示:

我在附加到ScrollView的脚本上实现了OVRTouchpad.TouchHandler这样的事件:

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 Input Muodule时,即使我尝试滑动,​​也会处理Tap输入。因此,每当我在注视按钮(滚动视图的孩子)的同时向任何方向滑动。单击按钮带我到其他菜单。我不确定这是否是Gear VR输入系统的理想行为。正如我在Oculus Home App(以及商店中的其他应用程序)中看到的那样,它只会滚动而不会触发子元素的点击。

如果检测到滑动,有没有办法阻止点击/点按?

非常感谢任何形式的帮助。

1 个答案:

答案 0 :(得分:0)

您是否尝试过插入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

SNIPPIT:

public event Action<SwipeDirection> OnSwipe;                // Called every frame passing in the swipe, including if there is no swipe.