【问题标题】:Implementing C# Android Touch Input Resistance or Timeout - Unity实现 C# Android 触摸输入电阻或超时 - Unity
【发布时间】:2016-08-25 16:46:13
【问题描述】:

早安,

我正在尝试制作一个点击游戏,但是,一次触摸产生的输出量是连续的。

如何每次点击输出一个而不是....100 个?

if (Input.touchCount == 1 && idle == true) 
{
p = true; 
pSound.Play(); 
Debug.Log("Tap"); 
} 
else if (Input.touchCount == 0) 
{ 
p = false; 
} 

【问题讨论】:

  • 了解如何正确提问。为什么要把你的代码放在评论区?
  • 修正问题(b)
  • 现在您将代码从评论部分移到问题部分,您能解释一下您的问题吗?改写它并解释你想做什么以及它目前在做什么。并且可能包括您从哪里运行代码,开始或更新功能。放一个复制问题所需的完整代码。
  • 所以,如果我在我的 android 上使用统一遥控器运行代码,当我快速触摸我的屏幕时,控制台会打印 4 个“点击”。我希望它仅在手指抬起后才能识别水龙头。

标签: c# android input unity3d touch


【解决方案1】:

这不是Input.touchCount 的用途。 Touch.tapCount 用于检测水龙头。您需要从Input.touches 获取所有触摸,然后将其作为数组保存到Touch 结构。然后遍历每个触摸并检查哪个触摸结束了event 被调用。在那里你可以检查Touch.tapCount

void Update()
{
    Touch[] touchScreen = Input.touches;
    int touchScreenSize = touchScreen.Length;
    for (int i = 0; i < touchScreenSize; i++)
    {
        if (touchScreen[i].phase == TouchPhase.Ended)
        {
            if (touchScreen[i].tapCount == 1)
            {
                pSound.Play();
                Debug.Log("Tap");
            }
            else if (touchScreen[i].tapCount == 0)
            {

            }
        }
    }
}

【讨论】:

  • 好的,这样我就可以检查我是否有不止一个水龙头。但是,因为它不会在每次点击后重新启动,所以 p = true 是一致的。每次触摸该 if 语句后,我是否需要重置数组?
  • @itsPav 您的问题在idle == true。我不知道它是如何工作的,我不明白你想在那里完成什么。我删除了它并更新了代码。它应该可以工作,你不需要重置任何东西。复制新代码。
  • 该代码缺少 p = true,不幸的是,即使在我完成点击后它也不会关闭。我已经将它添加到我的脚本中,同样的问题。有一个公共 bool 可以检查 p,以及我使用按钮成功完成的操作,在将手指从按钮上抬起后将其关闭,但是在屏幕上点击很困难。
  • @itsPav 您最初的问题是每帧检测到触摸太多次。可以说20次。我的答案中的代码解决了这个问题。它只检测一次敲击(当手指抬起时)。检查 debug.Log 你会看到。您在问题中描述的是我在这里解决的问题。不管你想做什么,我不知道......
  • @itsPav 如果您学习如何命名变量会很好。吗?这并没有描述任何东西。这个问题就解决了。您可以创建另一个新问题并描述您遇到的新问题。如果我了解您的新问题,我可能会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多