2015-05-21 122 views
0

我开发了一款游戏,需要用户通过一次触摸才能画出链接多个对象。目前使用的鼠标按钮,触摸输入此代码:Unity3d - 触摸输入问题

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

它工作正常使用鼠标,但它会给我的问题,当我编译为多点触摸设备。在多点触控设备中,如果您有两个手指向下,中间点将被视为输入。但是,如果我已经触摸了一个物体,然后用第二根手指放下屏幕,它会搅乱我的游戏输入并给我造成浩劫的设计。

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

回答

1

以下是你所需要的:

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

它只会火当一个手指是因为Input.touchCount == 1

0

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

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

0

在屏幕上我会有点轮询滚!

在您的更新(

所以)我通常做这样的事情:

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

+0

他想,只能检测到一个手指,并忽略其他。您拥有的代码将在屏幕上检测尽可能多的手指。 – Programmer

+0

这是真的,但是我认为我会把它作为一种最佳实践加以考虑,因为如果需要的话,他可以管理手指ID,以确保它是相同的鳍。我发现这是锁定任何繁琐的可靠方法。 – JedH

+0

他可以但你的代码没有。如果两个或更多手指放在屏幕上,您的if语句将始终运行。也许你应该在你的代码中实现finger ID来帮助别人。 – Programmer