赞
踩
想要更牛X一点可以和AR增强现实技术相结合,如下效果
若想实现以上的AR增强现实效果可参考以下文章
(2条消息) EasyAR实战项目图像识别与模型交互(全网首发,保姆级教程)_北村南的博客-CSDN博客_easyar
我们主要使用Unity官方提供的Touch接口,里面已经包含了大量的触屏操作,完全满足我们的一般业务需求,该接口中主要方法如下
Touch接口
altitudeAngle | 0 弧度值指示触笔平行于表面,pi/2 指示垂直。 |
azimuthAngle | 0 弧度值指示触笔指向沿着设备 X 轴方向。 |
deltaPosition | 自上次像素坐标更改以来的位置增量。 |
deltaTime | 自记录的 Touch 值上次更改以来经过的时间。 |
fingerId | 触摸的唯一索引。 |
maximumPossiblePressure | 平台的最大可能压力值。如果 Input.touchPressureSupported 返回 false,此属性的值将始终为 1.0f。 |
phase | 描述触摸阶段。 |
position | 触摸在屏幕空间中的位置(像素坐标)。 |
pressure | 当前应用于触摸的压力大小。1.0f 被视为平均触摸压力。如果 Input.touchPressureSupported 返回 false,此属性的值将始终为 1.0f。 |
radius | 触摸半径的估计值。加上 radiusVariance 可获得最大触摸大小,减去它可获得最小触摸大小。 |
radiusVariance | 此值确定触摸半径的精度。半径加上此值可获得最大触摸大小,减去它可获得最小触摸大小。 |
rawPosition | 触摸触点在屏幕空间中的第一个位置(像素坐标)。 |
tapCount | 点击次数。 |
type | 用于指示触摸是 Direct、Indirect(或远程)还是 Stylus 类型的值。 |
TouchPhase
该变量是一个枚举类型,其中包含可能的手指触摸状态。这些状态表示手指在最近的帧更新时可以采取的操作。因为设备在整个“生命周期”中对触摸进行跟踪,所以触摸的开始和结束以及之间的移动可以在发生触摸的帧上报告。
Began | 手指触摸了屏幕。 |
Moved | 手指在屏幕上进行了移动。 |
Stationary | 手指正在触摸屏幕但尚未移动。 |
Ended | 从屏幕上抬起了手指。这是最后一个触摸阶段。 |
Canceled | 系统取消了对触摸的跟踪。 |
详细解释见官方文档
UnityEngine.Touch - Unity 脚本 API
编写脚本,随后将脚本放置于模型上即可
脚本一:放缩+360度旋转模型
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class suofang : MonoBehaviour
- {
- 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;
- }
- }
脚本二:单击、双击、滑动页面
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
-
- public class chuping : MonoBehaviour
- {
- 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 = "双击了屏幕!";
- }
- else
- {
- DoubleClickTips.text = "单击了屏幕!";
- }
- FloFirstTime = Time.time; //记录时间
-
- }
-
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。