Unity3D触摸事件绑定

时间:2015-09-07 08:10:19

标签: android mobile unity3d touch multi-touch

我在使用Unity3d的2D游戏中创建了一个按钮,添加了名为PADBASE的盒式对撞机2d以这种方式检测触摸事件:

if(Input.touchCount > 0)
{
    for(int i = 0; i < Input.touchCount; i++)
    {
        Vector3 mouseWorldPos3D = Camera.main.ScreenToWorldPoint(Input.GetTouch(i).position);
        Vector2 mousePos2D = new Vector2(mouseWorldPos3D.x, mouseWorldPos3D.y);
        Vector2 dir = Vector2.zero;
        RaycastHit2D hit = Physics2D.Raycast(mousePos2D, dir);
        Touch t = Input.GetTouch(i);

        if (hit.transform != null)
        {
            if(Physics2D.Raycast (hit.transform.position , hit.transform.forward))
            {
                GameObject recipient = hit.transform.gameObject;

                if(t.phase == TouchPhase.Began) //poczatek dotyku
                {
                    // button clicked

                    // change colour to red to visually show that button is being pressed
                }
                else if (t.phase == TouchPhase.Ended)
                {
                    // change collor to its default colour to visually show that its no longer pressed
                }
            }

        }
    }
}

我们假设我会在玩家触摸按钮时将按钮颜色更改为红色,并在释放手指时将其恢复为默认颜色(例如)

现在它显然只有当玩家释放他的手指时,只要他的手指实际上是在盒子对撞机的界限内,我想要做的是“绑定触摸事件(?)”仍然抓住触摸事件(滑动或结束)即使玩家将手指移到对手外面而不释放他的手指(例如意外)

我期待着一些建议,谢谢。

在我的游戏中,我将有多个按钮,因此需要多点触控。

1 个答案:

答案 0 :(得分:0)

解决了,它实际上变得非常简单,你需要存储和比较触摸手指ID。

解决方案:

- 触摸开始:

检查触摸是否与上面附带的代码中的游戏对象框对撞机有关。

获取触摸手指ID并将其传递给您的按钮或保持其参考

- 触摸结束:

将触摸手指ID与存储的触摸ID进行比较,如果它们相等,则将存储的手指ID设置为-1并执行应在触摸上执行的代码

- 触摸移动或(||)静止:

在触摸结束时对触摸ID进行相同的比较,并执行应该在播放器滑动/移动手指时执行的代码,但不要修改手指ID变量。

就是这样,适用于多点触控的多个按钮。