最近因为项目需要所以总结了一些这个方面的资料。毕竟好记性不如烂笔头!Unity 触屏操作

当IOS或Android设备上运行Unity游戏时,桌面系统的鼠标左键可以自动变为手机屏幕上的触屏操作,但如多点触屏等操作却是无法利用鼠标操作进行的。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;elseisforward = -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 在手机上运行,可以发现触摸起了效果。

Unity 触摸屏操作(多点触摸)相关推荐

  1. Unity触摸屏TouchPhase多点触碰旋转放大缩小

    Unity触摸屏TouchPhase多点触碰旋转放大缩小 最近做了一个展厅的项目需要用到触摸屏多点触控,直接上代码 最近做了一个展厅的项目需要用到触摸屏多点触控,直接上代码 private Touch ...

  2. Unity 移动端禁止多点触摸,禁止多点操作

    在Awake中执行就行 Input.multiTouchEnabled = false;//禁止多点触摸

  3. android 多手指触摸屏,AIR Android:关于多点触摸

    处理用户交互 目前,触摸屏已经成为移动设备的标配,Android设备也不例外.因此,对开发者来说,处理用户交互在很大程度上也就是处理手与触摸屏的交互. 由于手指很灵活,在一块触摸屏上可以产生多种多样的 ...

  4. android怎么监听多点触摸_大尺寸触摸屏厂家定制多点触摸框

    深圳融创方圆是订做红外大尺寸触摸屏生产厂家,弧形/直角/异形/U型大尺寸红外多点触摸框定做15寸-1000寸超大尺寸红外触控屏可以用于配合液晶拼接屏,DLP拼接屏,无缝拼接屏,小间距LED.互动投影. ...

  5. 普通电阻触摸屏多点触摸低成本解决方 转载

    苹果公司iPhone的成功将多点触摸技术推到了一个前所未有的高度,经典的弹钢琴应用程序可以支持超过5点的同时触摸,虽然这一性能并不见得有太多的实用价值,但绝对带给了用户技术无限领先的震撼感.苹果公司的 ...

  6. Unity判断手势的滑动方向,单点触摸和多点触摸,并获取刚触摸以及触摸结束事的坐标

    Unity判断手势触摸的类型 ,判断手势的滑动方向,并获取刚触摸以及触摸结束事的坐标 本章咱们一起来看下unity对有触摸手势做出的响应 单点触摸 Input.touchCount==1 移动触摸 I ...

  7. unity3d透明投影+红外线激光多点触摸+unity win7多点触摸案例

    透明投影+红外线激光多点触摸+unity win7多点触摸案例 明投影+红外线激光多点触摸+unity win7多点触摸案例 迟点把这个多点触摸的资料分享给大家 密码:www.yeehot.com 下 ...

  8. android怎么监听多点触摸_什么是多点触控技术,有哪些用途

    自从乔布斯将触控技术用于苹果手机上,很多的手机厂商纷纷效仿,触控技术几乎成为手机的"标配".其实,触控技术早就存在,只是一直未能大面积用于各种设备中,本文将带您认识神奇的触控技术. ...

  9. 基于Visual C++2010与windows SDK fo windows7开发Windows 7的多点触摸特性应用程序(1)

    2008年5月28日,微软即将退休的精神领袖比尔·盖茨和首席执行官史蒂夫·鲍尔默共同在北圣地亚哥四季艾维亚拉洲际度假村举办的2008 D6 All Things数字化大会上向到场的嘉宾展示了windo ...

  10. WP7开发—Silverlight多点触摸事件详解【含Demo代码】

    最近在学习WP7的Silverlight编程,就把学习到知识点整理为日志,方便自己理解深刻点,也作为笔记和备忘,如有不合理或者错误之处,还恳请指正. WP7的支持多点触摸,有两种不同的编程模式: 1. ...

最新文章

  1. 前后端分离nginx配置,同时解决跨域问题
  2. 还只是 39 岁!一个天才年轻程序员的陨落
  3. 【教程】1、加载静态内容
  4. python读取excel指定列-Python读取excel指定列生成指定sql脚本的方法
  5. Html.BeginForm() vs Ajax.BeginForm() in MVC3
  6. POJ 1631 nlogn求LIS
  7. NodeJs取参的四种方法
  8. 【华为云技术分享】云小课 | 购买的数据盘在服务器看不到?磁盘初始化很重要!
  9. Vue+Vue Router+Vuex页面演示
  10. mysql 矩表_mysql表某相同值最近一次出现的间距
  11. CSDN用户数据库泄露事件给我们的启示
  12. windows - 更改用户账户名称(windows10)
  13. 我个人中意的VS2017/VS2019插件,推荐给大家(#^.^#)
  14. ultravnc软件,5款ultravnc软件推荐
  15. dedecms 织梦后台系统配置参数空白的解决方法
  16. Primo Ramdisk配置教程
  17. 云服务的未来:下一个淘宝
  18. GPT-4正式发布!如何访问 怎么免费使用GPT-4?
  19. 数据分析面试题-面试话术
  20. R计算方差膨胀因子(VIF,Variance Inflation Factor)计算并解读VID与共线性(Multicollinearity)的关系实战

热门文章

  1. (三-1)随机森林分类器(共3小节,完整代码即文章中所有代码)
  2. FYI | NIH Virtual Meeting
  3. 部署外网网站(一)——内网穿透实现外网访问
  4. 浅谈西门子840d主轴速度控制_西门子 840D 数控系统故障诊断与维修
  5. 柯美服务器处理文件慢,处理打印机在打印文件时打印速度过慢的原因 看完你就知道了...
  6. python中除法运算定律_除法的简便运算的公式
  7. 网页版MSDOS的实现网站
  8. win10系统电脑提示此程序被组策略阻止的解决办法
  9. 网络上各种指数 总结 收集
  10. 如何把一张照片的像素提高_简单操作,让一张模糊的照片秒变清晰