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 变量。
就是这样,在多点触控的情况下可以很好地处理多个按钮。
我使用 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 变量。
就是这样,在多点触控的情况下可以很好地处理多个按钮。