销毁GetMouseButtonDown事件并定位或强制mousebuttonup

时间:2017-07-09 18:05:42

标签: c# unity3d mouse-position

当我在Android上运行我的应用时,第一个手指触摸调用Input.GetMouseButtonDown(0) 第二次触摸调用Input.GetMouseButtonDown(1)。 我想在某些情况下覆盖GetMouseButtonDown(0) - 所以第二个手指(1)触摸将成为第一个(0),我不知道该怎么做。 这个或如何在第一次手指触摸时强制mouseButtonUp - 我想从系统中删除第一个“点击”,因此在2次触摸的情况下它不会使用Input.mousePosition

为什么呢? 当用户可以绘制线条时,我正在创建一个绘图应用程序。 用户可以绘制一个区域(在一个矩形中)和一个他不应该绘制的区域,我知道在按下不需要的区域时如何检测。 但是有时我的手掌会在不需要的区域(不Input.GetMouseButtonDown(0))上创建不需要的第一次触摸Input.GetMouseButtonUp(0),当我开始绘制一条线时 Input.mousePosition获得两次触摸的平均值,因此我只想要一种方法从系统中删除“向下”触摸/点击。或者另一种解决我问题的方法。

这是我的代码:

 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))
        {...}

1 个答案:

答案 0 :(得分:1)

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

这些功能中的每一个都会返回Touch,因此您可以使用Touch.fingerId来同时检测/跟踪您想要的触摸次数。您还可以使用传递到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来限制它。实施取决于您想要的确切内容。