添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

(2条消息) EasyAR实战项目图像识别与模型交互(全网首发,保姆级教程)_北村南的博客-CSDN博客_easyar

我们主要使用Unity官方提供的Touch接口,里面已经包含了大量的触屏操作,完全满足我们的一般业务需求,该接口中主要方法如下

Touch 接口

maximumPossiblePressure 平台的最大可能压力值。如果 Input.touchPressureSupported 返回 false,此属性的值将始终为 1.0f。 phase 描述触摸阶段。 position 触摸在屏幕空间中的位置(像素坐标)。 pressure 当前应用于触摸的压力大小。1.0f 被视为平均触摸压力。如果 Input.touchPressureSupported 返回 false,此属性的值将始终为 1.0f。 radius 触摸半径的估计值。加上 radiusVariance 可获得最大触摸大小,减去它可获得最小触摸大小。 radiusVariance 此值确定触摸半径的精度。半径加上此值可获得最大触摸大小,减去它可获得最小触摸大小。 rawPosition 触摸触点在屏幕空间中的第一个位置(像素坐标)。 tapCount 点击次数。 用于指示触摸是 Direct、Indirect(或远程)还是 Stylus 类型的值。 private Touch oldTouch1; //上次触摸点1(手指1) private Touch oldTouch2; //上次触摸点2(手指2) void Update() //没有触摸,就是触摸点为0 if (Input.touchCount <= 0) return; //单点触摸, 水平上下旋转 if ( Input.touchCount ==1) Touch touch = Input.GetTouch(0); Vector2 deltaPos = touch.deltaPosition; transform.Rotate(Vector3.down * deltaPos.x, Space.World);//绕Y轴进行旋转 transform.Rotate(Vector3.right * deltaPos.y, Space.World);//绕X轴进行旋转,下面我们还可以写绕Z轴进行旋转 //多点触摸, 放大缩小 Touch newTouch1 = Input.GetTouch(0); Touch newTouch2 = Input.GetTouch(1); //第2点刚开始接触屏幕, 只记录,不做处理 if (newTouch2.phase == TouchPhase.Began) oldTouch2 = newTouch2; oldTouch1 = newTouch1; return; //计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型 float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position); float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position); //两个距离之差,为正表示放大手势, 为负表示缩小手势 float offset = newDistance - oldDistance; //放大因子, 一个像素按 0.01倍来算(100可调整) float scaleFactor = offset / 75f; Vector3 localScale = transform.localScale; Vector3 scale = new Vector3(localScale.x + scaleFactor, localScale.y + scaleFactor, localScale.z + scaleFactor); //在什么情况下进行缩放 if (scale.x >= 0.5f && scale.y <= 2f) transform.localScale = scale; //记住最新的触摸点,下次使用 oldTouch1 = newTouch1; oldTouch2 = newTouch2; public Text LeftRightTips; //左右划屏 public Text UpDownTips; //上下划屏 public Text DoubleClickTips; //双击 private Vector2 DeltaArea; //二维向量,滑屏区域 private bool BoolSecondClick; //是否为第二次点击 private float FloFirstTime=0f; //第一次点击时间 private float FloSecondTime=0f; //第二次点击时间 // Use this for initialization void Start () { //初始化,测试数值 DeltaArea = Vector2.zero; // Update is called once per frame void Update () { /* 手指离开屏幕 */ //Input.touchCount是静态整形变量,当一只手指接触到屏幕时返回1,二只手指返回2,以此类推。 if (Input.touchCount == 1 && (Input.GetTouch(0).phase == TouchPhase.Ended)) DeltaArea = Vector2.zero; //DoubleClickTips.text = ""; //如果手指离开屏幕,双击效果消失 /* 识别手指滑屏 */ if (Input.touchCount == 1 && (Input.GetTouch(0).phase == TouchPhase.Moved)) DeltaArea.x += Input.GetTouch(0).deltaPosition.x; //不断获取手指触屏时x,y轴的变化量并赋值给滑屏区域 DeltaArea.y += Input.GetTouch(0).deltaPosition.y; if (DeltaArea.x > 150) LeftRightTips.text = "右滑屏"; }else if(DeltaArea.x < -150) LeftRightTips.text = "左滑屏"; if (DeltaArea.y > 150) UpDownTips.text = "上滑屏"; }else if (DeltaArea.y <- 150) UpDownTips.text = "下滑屏"; /* 手指双击识别*/ if (Input.touchCount == 1 && (Input.GetTouch(0).phase == TouchPhase.Began)) FloSecondTime = Time.time; if (FloSecondTime - FloFirstTime > 0.02F && FloSecondTime - FloFirstTime < 0.3F) {//当第二次点击与第一次点击的时间间隔在0.02秒至0.3秒之间时 DoubleClickTips.text = "双击了屏幕!"; DoubleClickTips.text = "单击了屏幕!"; FloFirstTime = Time.time; //记录时间