Unity3D 触摸事件绑定

Unity3D touch event binding

我使用 Unity3d 在我的 2d 游戏中创建了一个按钮,添加了名为 PADBASE 的 box collider 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
                }
            }

        }
    }
}

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

现在它显然只有在玩家松开他的手指时才会起作用,只要他的手指实际上在盒子碰撞器的范围内,我想做的是 "bind touch events(?)" 仍然捕捉触摸事件(滑动或结束)即使玩家将他的手指移出对撞机而没有松开他的手指(例如不小心)

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

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

解决了,其实很简单,需要存储和比较触摸手指ID。

解决方案:

- 触摸开始:

检查触摸是否像上面附加的代码中那样使用游戏对象盒对撞机。

获取触摸手指 ID 并将其传递给您的按钮或保留它的引用

- 触摸结束:

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

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

像在触摸结束时一样对触摸 ID 进行相同的比较,并执行如果玩家 slide/move 他的手指应该执行的代码,但不要修改您的手指 ID 变量。

就是这样,在多点触控的情况下可以很好地处理多个按钮。