C# 使用统一手势识别器的双点击全息镜头
我试图在全息镜头中实现轻拍和双击手势。每一个单独的手势都有效,但是,当我双击时,它也会双击两次。我看到一些人使用定时器来解决这个问题,但我认为可能有一个更优雅的解决方案 因为我使用的是手势识别器,所以我有一个回调方法:C# 使用统一手势识别器的双点击全息镜头,c#,unity3d,uigesturerecognizer,gesture,hololens,C#,Unity3d,Uigesturerecognizer,Gesture,Hololens,我试图在全息镜头中实现轻拍和双击手势。每一个单独的手势都有效,但是,当我双击时,它也会双击两次。我看到一些人使用定时器来解决这个问题,但我认为可能有一个更优雅的解决方案 因为我使用的是手势识别器,所以我有一个回调方法: private void GestureRecognizer_TappedEvent(InteractionSourceKind source, int tapCount, Ray headRay) { switch (tapCount)
private void GestureRecognizer_TappedEvent(InteractionSourceKind source, int tapCount, Ray headRay)
{
switch (tapCount)
{
case 1:
OnTap();
break;
case 2:
OnDoubleTap();
break;
}
}
我可以在这里做些什么吗,或者我必须使用一个单独的脚本来检查它的Update
功能吗
谢谢 我使用了一个计时器,在“双击速度”计时器过期后,我单次点击或检测到第二次点击,然后我双击 不利的一面是,双击要比双击鼠标花费更长的时间,因此在单次点击中增加了一些延迟,我不确定这是否是一个好的体验
这有点旧了,所以我很好奇你最后做了什么。有一种方法可以避免使用计时器,因为双击手势是可以识别的
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();
}
由于仍然没有完整的(有效的)答案,而且我在其他地方也找不到,下面是我如何修复它的。类似于使用计时器,但在我看来稍微好一点
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默认的半秒。我最终使用了计时器,因为不幸的是,我找不到更好的方法。我希望有一个更好的方法,但它似乎是相当标准的。这不起作用。它基本上用
tapCount
作为1调用它一次,然后用它作为2再次调用它。所以它不会绕过第一个。我的意思是,你的代码和我的差不多。我已经添加了双击手势设置。