Unity 移动端触摸屏操作
来源:互联网 发布:360浏览器淘宝比价 编辑:程序博客网 时间:2024/04/30 04:36
转载了别人写的一篇博客,写的很详细,感觉自己还跟别人差的好远昂~
不过我把人家的精华搬过来了
原文链接:http://blog.csdn.net/u014550279/article/details/50537713
Unity 触屏操作
当将Unity游戏运行到iOS或Android设备上时,桌面系统的鼠标左键可以自动变为手机屏幕上的触屏操作,但如多点触屏等操作却是无法利用鼠标操作进行的。Unity的Input类中不仅包含桌面系统的各种输入功能,也包含了针对移动设备触屏操作的各种功能,下面介绍一下Input类在触碰操作上的使用。
首先介绍一下Input.touches结构,这是一个触摸数组,每个记录代表着手指在屏幕上的触碰状态。每个手指触控都是通过Input.touches来描述的:
fingerId
触摸的唯一索引
position
触摸屏幕的位置
deltatime
从最后状态到目前状态所经过的时间
tapCount
点击数。Andorid设备不对点击计数,这个方法总是返回1
deltaPosition
自最后一帧所改变的屏幕位置
phase
相位,也即屏幕操作状态
其中phase(状态)有以下这几种:
Began
手指刚刚触摸屏幕
Moved
手指在屏幕上移动
Stationary
手指触摸屏幕,但自最后一阵没有移动
Ended
手指离开屏幕
Canceled
系统取消触控跟踪,原因如把设备放在脸上或同时超过5个触摸点
下面通过一段代码来进行移动设备触摸操作的实现:
using UnityEngine;using System.Collections;public class AndroidTouch : MonoBehaviour { private int isforward;//标记摄像机的移动方向 //记录两个手指的旧位置 private Vector2 oposition1=new Vector2(); private Vector2 oposition2=new Vector2(); Vector2 m_screenPos = new Vector2(); //记录手指触碰的位置 //用于判断是否放大 bool isEnlarge(Vector2 oP1, Vector2 oP2, Vector2 nP1, Vector2 nP2) { //函数传入上一次触摸两点的位置与本次触摸两点的位置计算出用户的手势 float leng1 = Mathf.Sqrt((oP1.x - oP2.x) * (oP1.x - oP2.x) + (oP1.y - oP2.y) * (oP1.y - oP2.y)); float leng2 = Mathf.Sqrt((nP1.x - nP2.x) * (nP1.x - nP2.x) + (nP1.y - nP2.y) * (nP1.y - nP2.y)); if (leng1 < leng2) { //放大手势 return true; } else { //缩小手势 return false; } } void Start() { Input.multiTouchEnabled = true;//开启多点触碰 } void Update() { if (Input.touchCount <= 0) return; if (Input.touchCount == 1) //单点触碰移动摄像机 { if (Input.touches[0].phase == TouchPhase.Began) m_screenPos = Input.touches[0].position; //记录手指刚触碰的位置 if (Input.touches[0].phase == TouchPhase.Moved) //手指在屏幕上移动,移动摄像机 { transform.Translate(new Vector3( Input.touches[0].deltaPosition.x * Time.deltaTime, Input.touches[0].deltaPosition.y * Time.deltaTime, 0)); } } else if (Input.touchCount > 1)//多点触碰 { //记录两个手指的位置 Vector2 nposition1 = new Vector2(); Vector2 nposition2 = new Vector2(); //记录手指的每帧移动距离 Vector2 deltaDis1 = new Vector2(); Vector2 deltaDis2 = new Vector2(); for (int i = 0; i < 2; i++) { Touch touch = Input.touches[i]; if (touch.phase == TouchPhase.Ended) break; if (touch.phase == TouchPhase.Moved) //手指在移动 { if (i == 0) { nposition1 = touch.position; deltaDis1 = touch.deltaPosition; } else { nposition2 = touch.position; deltaDis2 = touch.deltaPosition; if (isEnlarge(oposition1, oposition2, nposition1, nposition2)) //判断手势伸缩从而进行摄像机前后移动参数缩放效果 isforward = 1; else isforward = -1; } //记录旧的触摸位置 oposition1 = nposition1; oposition2 = nposition2; } //移动摄像机 Camera.main.transform.Translate(isforward*Vector3.forward * Time.deltaTime*(Mathf.Abs(deltaDis2.x+deltaDis1.x)+Mathf.Abs(deltaDis1.y+deltaDis2.y))); } } }}
将这个脚本绑定在主摄像机上,发现单触摸操作可上下左右移动摄像机,双触摸操作可以缩放。
导出Android 在手机上运行,可以发现触摸起了效果。
0 0
- Unity 移动端触摸屏操作
- Unity 移动端触摸屏操作
- Unity 触摸屏单指移动相机
- Unity触摸屏
- 关于unity的鼠标双击和移动触摸屏的双击
- 关于unity的鼠标双击和移动触摸屏的双击
- unity的鼠标双击和移动触摸屏的双击
- Unity中的Input.Touch,移动端的触摸操作
- unity移动端操作方式(旋转、缩放手势)总结
- Unity中的Input.Touch,移动端的触摸操作
- Unity移动端手势操作——移动3D物体
- Unity 触摸屏缩放
- Unity移动设备手势操作拾遗
- Unity操作移动设备文件或文件夹
- unity操作android触屏移动代码
- Unity入门操作_ 规律移动_007
- 【Unity】Unity在移动平台中,文件操作路径详解
- Unity移动端播放视频
- vue.js 快速理解
- nginx和tomcat搭配使用,让nginx可以访问tomcat下面的静态资源
- hadoop从零开始--linux下jdk,tomcat,mysql的安装
- Glide Android图片加载的利器---基本介绍和使用
- 范围搜索 (Range Query)
- Unity 移动端触摸屏操作
- 使用maven创建web项目
- HTTP相关,Android使用Fidder抓包
- jsp和html的区别以及jsp是如何实现动态的
- 如何调试服务
- iOS开发(OC)——QQ点赞效果
- Java运行时动态加载类之ClassLoader加载class及其依赖jar包
- nginx 同一个IP上配置多个HTTPS主机
- Java 关于HashMap根据value反向获取key值