使用Unity3D 2018.2
试图获取单点,双击和按住键。
存在以下问题:
单次点击:有时不会注册我的单次点击
双击:每次我双击我的设备都会被呼叫8次
三次敲击:两次敲击被叫10次,三次三次被叫9次
这是我的代码,请执行C#和Unity的新手,我无法正确完成一个简单的任务,谢谢您的帮助
private void handleTouchTypes()
{
foreach (Touch touch in Input.touches)
{
float tapBeginTime = 0;
float tapEndedTime = 0;
// Touches Began
if (touch.phase == TouchPhase.Began)
{
tapBeginTime = Time.time;
}
// Touches Ended
if (touch.phase == TouchPhase.Ended)
{
tapEndedTime = Time.time;
// Single Touch: for 0.022f of a Second
if (touch.tapCount == 1 && ((tapEndedTime - tapBeginTime) < 0.03f))
{
Debug.Log("Single Touch");
}
// Hold Touch: within half a second .5f to 1f
if (touch.phase == TouchPhase.Moved && touch.deltaPosition.magnitude < 0.02f && (tapEndedTime - tapBeginTime) >= 0.5f && (tapEndedTime - tapBeginTime) <= 1f)
{
Debug.Log("Holding Touch");
}
}
if (touch.tapCount == 2)
{
// Double Tap
Debug.Log("Double Tap");
}
if (touch.tapCount >= 3)
{
// Triple Tap
Debug.Log("3 Touches and/or more");
}
}
}
答案 0 :(得分:1)
这里有一些不同的东西。
1)您正在致电
httpServer := &http.Server{
Handler: newHandler123(),
}
l, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatal(err)
}
err = httpServer.Serve(l)
if err != nil {
log.Fatal(err)
}
每个触摸元素开头的。表示您要支票
float tapBeginTime = 0;
float tapEndedTime = 0;
将永远不会过去,因为在您设置(tapEndedTime - tapBeginTime) < 0.03f
的那一刻,tapBeginTime
已被重置为0
。
如果您想基于每次触摸跟踪这些时间,我建议创建一个字典,将触摸的tapEndedTime = Time.time;
映射到它们的开始时间。您无需记录每次触摸的fingerId
,因为它足以作为根据需要计算的局部变量。
2)我对此不是100%肯定,但是您可能还需要检查tapEndedTime
之外的if (touch.phase == TouchPhase.Ended)
以获得准确的结果。我知道我个人以前没有明确检查过问题。
3)您还正在if (touch.tapCount == 2)
块的if (touch.phase == TouchPhase.Moved)
内部检查 。我会让你知道这一点:)
我希望这些观点能帮助您解决一些眼前的问题。解决了这些表面问题后,建议您进一步探索优化最终代码的方法。 祝你好运!