本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
阿里云开发者社区用户服务协议
》和
《
阿里云开发者社区知识产权保护指引
》。如果您发现本社区中有涉嫌抄袭的内容,填写
侵权投诉表单
进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
(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; //记录时间