4

我正在尝试在 hololens 中实现轻敲和双击手势。每个单独的手势都有效,但是,当我双击时,它也会单击两次。我看到一些使用计时器来解决它,但我认为可能有更优雅的解决方案。

由于我使用的是 GestureRecogniser,所以我有一个回调方法:

private void GestureRecognizer_TappedEvent(InteractionSourceKind source, int tapCount, Ray headRay)
    {

        switch (tapCount)
        {
            case 1:
                OnTap();
                break;
            case 2:
                OnDoubleTap();
                break;
        }

    }

我可以在这里做任何事情,还是我必须求助于一个单独的脚本来检查它的Update功能?

谢谢!

4

3 回答 3

0

有一种方法可以避免使用计时器,因为双击手势是可识别的。

void Start()
{
    // get a new gesture recognizer
    recognizer = new GestureRecognizer();
    // set up to receive both tap and double tap events
    recognizer.SetRecognizableGestures(GestureSettings.Tap | GestureSettings.DoubleTap);
    // see https://docs.unity3d.com/550/Documentation/ScriptReference/VR.WSA.Input.GestureRecognizer.TappedEventDelegate.html 
    recognizer.TappedEvent += (source, tapCount, ray) =>
    {
        if (tapCount == 1)
        {
            Debug.Log("Tap");
        }
        else if (tapCount == 2)
        {
            Debug.Log("Double Tap");
        }
    };
    recognizer.StartCapturingGestures();
}
于 2016-11-04T08:12:34.867 回答
0

由于仍然没有完整的(工作)答案,而且我在其他地方找不到答案,这就是我修复它的方法。类似于使用计时器,但在我看来稍微好一点。

const float DELAY = .5f;

void Start()
{
    recognizer = new GestureRecognizer();
    recognizer.StartCapturingGestures();

    recognizer.SetRecognizableGestures(GestureSettings.Tap | GestureSettings.DoubleTap);
    recognizer.TappedEvent += (source, tapCount, ray) =>
    {
        if (tapCount == 1)
            Invoke("SingleTap", DELAY);
        else if (tapCount == 2)
        {
            CancelInvoke("SingleTap");
            DoubleTap();
        }
    };
}

void SingleTap()
{
    Debug.Log("Single Tap")
}

void DoubleTap()
{
    Debug.Log("Double Tap")
}

注意:我找不到识别双击的延迟,所以我认为这是 Windows 默认的半秒。

于 2017-03-07T12:05:11.373 回答
0

我使用了一个计时器,在“双击速度”计时器到期后,我 SingleTap 或检测到第二次点击,然后我 DoubleTap。

不利的一面是双击比双击鼠标花费的时间更长,因此会增加单击的一些延迟,我不确定这是否是一种好的体验。

这有点旧,所以我很好奇你最后做了什么。

于 2016-10-20T16:20:46.623 回答