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里实现简单的手指在方向盘上滑动,然后方向盘随着顺时针和逆时针转动了。
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里实现简单的手指在方向盘上滑动,然后方向盘随着顺时针和逆时针转动了。
相关文章推荐
- 用最简单的函数实现功能:判断一个int数据是否是2的x次幂(不能使用循环)。
- 简单代码,实现快速判断几个EDIT是否允许为空
- 防人人网客户端侧滑效果,简单实现Android滑动菜单特效
- Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现
- Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现
- Unity 滑动列表时实现平滑阻尼效果初始篇
- Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现
- Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现
- Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现
- Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现
- Tab切换动画滑动效果的一个简单实现
- Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现
- Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现
- 页面图片浮动左右滑动效果的简单实现案例
- 简单的方法实现判断Mysql内某个字段Fields是否存在
- 人人客户端滑动效果的简单实现
- AJAX 实现判断用户名是否存在 无刷新效果
- Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现
- c# 判断指定文件是否存在的简单实现
- 页面图片浮动左右滑动效果的简单实现案例