【问题标题】:Unity3d - Touch Input issueUnity3d - 触摸输入问题
【发布时间】:2015-08-02 23:08:51
【问题描述】:

我开发了一款游戏,需要用户通过一次触摸来绘制以链接多个对象。目前使用此代码使用鼠标按钮作为触摸输入:

if(Input.GetButton("Fire1"))
    {
        mouseIsDown = true;
        ...//other codes
    }

它在鼠标上运行良好,但是当我为多点触控设备编译它时会给我带来问题。在多点触控设备中,如果您有 2 个手指向下,则中间点将作为输入。但如果我已经触摸了一个对象,然后用第二根手指向下触摸屏幕,它会打乱我的游戏输入并给我带来破坏性设计。

我想要的是将其限制为仅 1 次触摸。如果第二根手指接触到它,请忽略它。我怎样才能做到这一点?

【问题讨论】:

    标签: android ios unity3d multi-touch


    【解决方案1】:

    以下就是您所需要的:

         if ((Input.touchCount == 1) && (Input.GetTouch (0).phase == TouchPhase.Began))   {
                mouseIsDown = true;
                ...//other codes
         }
    

    因为Input.touchCount == 1,它只会在一根手指在屏幕上时触发

    【讨论】:

      【解决方案2】:

      您正在使用 Input.GetButton。按钮不是触摸。你可能想看看Input.GetTouch

      如果您需要支持多种输入类型的设备,您可能需要考虑编写自己的管理器脚本来将其抽象出来。

      【讨论】:

        【解决方案3】:

        我会进行一些投票!

        所以在你的 Update() 中,我通常会这样做:

        foreach (Touch touch in Input.touches)
        {
            // Get the touch id of the current touch if you're doing multi-touch.
            int pointerID = touch.fingerId;        
        
            if (touch.phase == TouchPhase.Began)
            {
                // Do something off of a touch.
            }
        }
        

        如果您正在寻找更多信息,请查看: TouchPhases in Unity

        【讨论】:

        • 他只想检测一根手指而忽略其他手指。您拥有的代码将在屏幕上检测到尽可能多的手指。
        • 确实如此,但我认为我会将其作为最佳实践加入其中,因为他可以管理手指 ID,例如,如果需要确保它是相同的手指 ID。我发现这是锁定任何错误的可靠方法。
        • 他可以,但你的代码没有。如果两个或多个手指放在屏幕上,您的 if 语句将始终运行。也许你应该在你的代码中实现手指 id 来帮助别人。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-19
        相关资源
        最近更新 更多