销毁 GetMouseButtonDown 事件和位置或强制 mousebuttonup

Destroy GetMouseButtonDown event and position or force mousebuttonup

当我 运行 我的应用程序在 Android 上时,第一个手指触摸调用 Input.GetMouseButtonDown(0) 第二次触摸调用 Input.GetMouseButtonDown(1)。 在某些情况下,我想覆盖 GetMouseButtonDown(0) - 所以第二根手指 (1) 触摸将成为第一根 (0),我不知道该怎么做。 无论是这个还是如何在第一次手指触摸时强制 mouseButtonUp - 我想从系统中删除第一个 "click" 这样它就不会在 2 次触摸的情况下使用 Input.mousePosition

为什么? 当用户可以画线时,我正在创建一个绘画应用程序。 有一个用户可以绘画的区域(在一个矩形中)和一个他不应该绘画的区域,我知道如何检测何时按下不需要的区域。 但有时我的手掌会在不需要的区域(没有 Input.GetMouseButtonUp(0))和当我开始画线时产生不需要的第一次触摸 Input.GetMouseButtonDown(0) Input.mousePosition 获取两次触摸的平均值,所以我只想要一种从系统中删除 "down" touch/click 的方法。或者用其他方法解决我的问题。

这是我的代码:

 if (Input.touchCount == 0)
    { screenPoint = new Vector3(0, 0, 0); 
     currentTouch = 4;  //currentTouch is for GetMouseButtonUp(currentTouch)  }

    for (int i=0; i< Input.touchCount; i++)
    {
      touch = Input.GetTouch(i);
      screenPointTemp = touch.position;
      screenPointTemp3 = new Vector3(screenPointTemp.x, screenPointTemp.y, zCam);

       //if the touch is in a "good" zone-
      if (Camera.main.ScreenToWorldPoint(screenPointTemp3).z > BottomNod.transform.position.z - nodeScale) 
      {
          screenPoint = touch.position;
          currentTouch = i;
       }

        }
    }

if (Input.GetMouseButtonUp(currentTouch))
        {...}

在移动设备上工作以检测屏幕上的触摸而不点击任何对象时,您应该使用 Input.touchCountInput.GetTouchInput.touches。尽管我强烈推荐 Input.GetTouch,因为它甚至不会像 Input.touches 这样分配临时变量。要获得触摸使用的位置,Input.GetTouch(index).position.

这些功能中的每一个 returns Touch so you can use Touch.fingerId 到 detect/keep 跟踪您同时需要多少次触摸。您还可以使用传递给 Input.GetTouch 的索引来跟踪触摸。这完全取决于你。

这会检测每个 在移动设备上的向下、移动和向上:

for (int i = 0; i < Input.touchCount; ++i)
{
    //Touch Down
    if (Input.GetTouch(i).phase == TouchPhase.Began)
    {

    }

    //Touch Moved
    if (Input.GetTouch(i).phase == TouchPhase.Moved)
    {

    }

    //Touch Up
    if (Input.GetTouch(i).phase == TouchPhase.Ended)
    {

    }
}

仅限一次触摸(使用索引 0):

if (Input.touchCount == 1)
{
    //Touch Down
    if (Input.GetTouch(0).phase == TouchPhase.Began)
    {

    }

    //Touch Moved
    if (Input.GetTouch(0).phase == TouchPhase.Moved)
    {
        //Draw?
    }

    //Touch Up
    if (Input.GetTouch(0).phase == TouchPhase.Ended)
    {

    }
}

正如我所说,您可以使用 fingerId 来限制它。实施取决于您想要什么。