我在使用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
}
}
}
}
}
我们假设我会在玩家触摸按钮时将按钮颜色更改为红色,并在释放手指时将其恢复为默认颜色(例如)
现在它显然只有当玩家释放他的手指时,只要他的手指实际上是在盒子对撞机的界限内,我想要做的是“绑定触摸事件(?)”仍然抓住触摸事件(滑动或结束)即使玩家将手指移到对手外面而不释放他的手指(例如意外)
我期待着一些建议,谢谢。
在我的游戏中,我将有多个按钮,因此需要多点触控。
答案 0 :(得分:0)
解决了,它实际上变得非常简单,你需要存储和比较触摸手指ID。
解决方案:
- 触摸开始:
检查触摸是否与上面附带的代码中的游戏对象框对撞机有关。
获取触摸手指ID并将其传递给您的按钮或保持其参考
- 触摸结束:
将触摸手指ID与存储的触摸ID进行比较,如果它们相等,则将存储的手指ID设置为-1并执行应在触摸上执行的代码
- 触摸移动或(||)静止:
在触摸结束时对触摸ID进行相同的比较,并执行应该在播放器滑动/移动手指时执行的代码,但不要修改手指ID变量。
就是这样,适用于多点触控的多个按钮。