您的位置:首页 > 移动开发 > Unity3D

unity实现判断手指是否顺时针滑动实现简单的方向盘效果

2016-11-03 21:25 936 查看
首先定义用到的值:

Vector3[]  cons=new Vector3[4];
Vector3[]  fanhuibtn=new Vector3[4];//返回button的四个角
Vector3 fanhuiy;//返回键的低点y值
Vector2 center=new Vector3();//方向盘中心点
Vector2 lasttouch=new Vector2();//上一桢触摸点
Vector2 currenttouch=new Vector2();//当前触摸点

用一张图片作为方向盘  public GameObject pan;

在start函数添加以下代码:

//允许多点触摸
Input.multiTouchEnabled = true;
pan.GetComponent<RectTransform> ().GetWorldCorners (cons);//获取方向盘四个角的坐标

 
center = (cons [0] + cons [1] + cons [2] + cons [3]) / 4;//得到方向盘中心点

在update()函数添加以下代码,用来记录手指滑动信息:

for (int m=0; m < Input.touchCount; m++) {
if (Input.touches[m].phase==TouchPhase.Began) {
lasttouch = new Vector2 ();
currenttouch = lasttouch;
}
if (Input.touches [m].phase == TouchPhase.Ended) {
lastt=new Vector3(0,0,0);
}
if (Input.touches [m].phase == TouchPhase.Moved) {//当按下触摸。 记录 触摸点
if(Input.touches[m].position.y<(fanhuiy.y+10)&&Input.touches[m].position.y>(cons[1].y+20)){
if(lastt!=new Vector3(0,0,0))
maincam.transform.Rotate (0,-lastt.x+Input.touches [m].position.x, 0);
lastt = Input.touches[m].position;
}
lasttouch = currenttouch;
currenttouch = Input.touches [0].position;
//currenttouch=Input.mousePosition;
if (lasttouch.x > cons [0].x && lasttouch.x < cons [3].x && lasttouch.y > cons [0].y && lasttouch.y < cons [1].y) {//上一桢不在ui内则返回
} else {
return;
}
if (currenttouch.x > cons [0].x && currenttouch.x < cons [3].x && currenttouch.y > cons [0].y && currenttouch.y < cons [1].y) {
//在按钮内部
if (nishizhen (lasttouch, currenttouch)) {
if (sum > 540 || sum == 540) {
pan.transform.Rotate (0.0f, 0.0f, 540 - sum);
sum = 540;
return;
}
pan.transform.Rotate (0.0f, 0.0f, 50 * angle (lasttouch, currenttouch));
sum += 50 * angle (lasttouch, currenttouch);
} else {
if (sum < -540 || sum == -540) {
pan.transform.Rotate (0.0f, 0.0f, -540 - sum);
sum = -540;
return;
}
pan.transform.Rotate (0.0f, 0.0f, -50 * angle (lasttouch, currenttouch));
sum -= 50 * angle (lasttouch, currenttouch);
}

} else {//不执行
return;
}

}
}

然后是定义nishizhen函数来判断手指滑动方式,这里用简单的余弦定理判定代码如下:

//fanfxiangpanxiangguan
bool nishizhen(Vector2 v1,Vector2 v2){
if ((v1.x > center.x && v2.x > center.x && v1.y < center.y && v2.y < center.y)) {
if (v2.x > v1.x || v2.y > v1.y)
return true;
else
return false;
}
else if ((v1.x < center.x && v2.x < center.x && v1.y < center.y && v2.y < center.y)) {
if (v2.x > v1.x || v2.y < v1.y)
return true;
else
return false;
}
else if ((v1.x < center.x && v2.x < center.x && v1.y > center.y && v2.y > center.y)) {
if (v2.x < v1.x || v2.y < v1.y)
return true;
else
return false;
}
else if ((v1.x > center.x && v2.x > center.x && v1.y > center.y && v2.y > center.y)) {
if (v2.x < v1.x || v2.y > v1.y)
return true;
else
return false;
}
else if (v1.x < center.x && v2.x > center.x && v1.y < center.y && v2.y < center.y)
return true;
else if (v1.x > center.x && v2.x < center.x && v1.y > center.y && v2.y > center.y)
return true;
else if (v1.x > center.x && v2.x > center.x && v1.y < center.y && v2.y > center.y)
return true;
else if (v1.x < center.x && v2.x < center.x && v1.y > center.y && v2.y < center.y)
return true;
else
return false;
}以上就可以在unity里实现简单的手指在方向盘上滑动,然后方向盘随着顺时针和逆时针转动了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐