unity 单指双指事件(单指点击移动,双指滑动拖放)
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class TouchControl : MonoBehaviour { private Vector3 startFingerPos;
private Vector3 endFingerPos;
private float xMoveDistance;
private float yMoveDistance;
private int backValue = ; private Vector3 target;
private Vector3 offSet;
private bool isOver = true; void FingerRotation()
{ xMoveDistance = Mathf.Abs(endFingerPos.x - startFingerPos.x);
yMoveDistance = Mathf.Abs(endFingerPos.y - startFingerPos.y); if (xMoveDistance > yMoveDistance)
{ if (endFingerPos.x - startFingerPos.x > )
{
backValue = -; //沿着X轴负方向移动
}
else
{
backValue = ; //沿着X轴正方向移动
} }
if (backValue == -)
{
transform.Rotate(Vector3.down * Time.deltaTime * , Space.Self);
}
else if (backValue == )
{
transform.Rotate(Vector3.up * Time.deltaTime * , Space.Self);
} } void MoveTo(Vector3 tar)
{
if (!isOver)
{
Vector3 offSet = tar - transform.position;
transform.position += offSet.normalized * * Time.deltaTime;
if (Vector3.Distance(tar, transform.position) < 0.5f)
{
isOver = true;
transform.position = tar;
}
} } // Use this for initialization
void Start()
{ } // Update is called once per frame
void Update()
{ //没有触摸
if (Input.touchCount <= )
{
//MoveTo(target);
} if(Input.touchCount==)//单指操作
{
Touch t1 = Input.GetTouch();
if ( t1.phase==TouchPhase.Began)
{
//1. 获取鼠标点击位置
//创建射线;从摄像机发射一条经过鼠标当前位置的射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//Input.GetTouch(0).position);
//发射射线
RaycastHit hitInfo = new RaycastHit();
if (Physics.Raycast(ray, out hitInfo))
{
//获取碰撞点的位置
if (hitInfo.collider.name == "Plane")
{
target = hitInfo.point;
target.y = 0.5f;
isOver = false;
}
}
transform.LookAt(target);
}
//2. 让角色移动到目标位置
MoveTo(target);
}
else if(Input.touchCount>)//多指操作
{
Touch t1 = Input.GetTouch();
Touch t2 = Input.GetTouch();
//单点触控记录初始点
if (t1.phase == TouchPhase.Began)
{
startFingerPos = t2.position;
} endFingerPos = t2.position;//实时手指位置 if ((t1.phase == TouchPhase.Moved)&& (t2.phase == TouchPhase.Moved)) //双指滑动进行物体旋转
{
FingerRotation();
return;
}//物体旋转 }
MoveTo(target);
}
}
Touch.position 是 一个 像素坐标(手机左下角为(0,0))
Touch.phase {Began,Moved,Stationary,Canceled,Ended} 代表 手指点击的状态
每次手指点击会在input.touches[]增加一个touch实例,记录手指的状态信息,当有一个手指退出屏幕,那么数组中的位置产生一个空缺,
当有新手指加入时候,新手指将替代刚刚退出的手指在数组中的位置。记得在手指退出屏幕时候,将手指所绑定的跟踪信息重新初始化。
Input.touchCount 触摸随之增长,一秒50次增量。
Input.GetTouch(0).phase==TouchPhase.Moved 手指滑动中最后一帧滑动的状态是运动的。
TouchPhase 触摸的几个状态。
Touch.deltaPosition 增量位置(Input.GetTouch(0).deltaPosition)最后一帧滑动的值,只返回xy轴坐标,也可用vector3(z轴为0),所以一般用vector2接收。
unity 单指双指事件(单指点击移动,双指滑动拖放)的更多相关文章
- ios UITapGestureRecognizer 单指单击、单指多击、多指单击、多指多击事件操作
转自:http://blog.csdn.net/longzs/article/details/7457108 在ios开发中,需用到对于手指的不同操作,以手指点击为例:分为单指单击.单指多击.多指单击 ...
- 在viewPager中双指缩放图片,双击缩放图片,单指拖拽图片
我们就把这个问题叫做图片查看器吧,它的主要功能有: (项目地址:https://github.com/TZHANHONG/ImageViewer/releases/tag/1.0,里面的MyImage ...
- 移动端touch事件——单指拖拽
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- js区分鼠标单双击 阻止事件冒泡
function clickOrDblClick(obj) { count++; if (obj != undefined) { var rowStr = $.trim($(obj).find(&qu ...
- HTML 5 服务器发送事件、Input 类型、表单元素、表单属性
HTML5 服务器发送事件(server-sent event)允许网页获得来自服务器的更新. Server-Sent 事件 - 单向消息传递 Server-Sent 事件指的是网页自动获取来自服务器 ...
- Android 单指触控拖拽,两指触控缩放
import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view. ...
- 使用 elementUI 的表单进行查询,表单中只有一个文本框时,回车会自动触发表单的提交事件,导致页面的刷新。
使用elementUI的el-form组件进行查询时,当输入框仅有一项时,回车自动提交表单,浏览器会刷新页面: 原因:由于当表单只有一个文本框时,按下回车将会触发表单的提交事件, 从而导致页面刷新. ...
- 【Android测试】【随笔】模拟双指点击
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5258660.html 手势 看到这个标题,很多人会想一想 ...
- 关于win10触控板两指点击无效的问题
一.前言 最近发现公司的本本两指点击触控板没有反应,单指和三指点击触控板都是正常的.网上也搜了 一些解决的方法,最开始因为没有明确自己的触控板是Synaptics还是Elan的,导致没有解决.首先我们 ...
随机推荐
- for循环操作数组
if(!empty($data)){ $arr_length=count($data); //数组的步长 $array_keys_list=array_values($data); //数组的键值 f ...
- java基础(10) -线程
线程 相当于轻量级进程,线程在程序中是独立的.并发的执行路径,每个线程有它自己的堆栈.自己的程序计数器和自己的局部变量.但是,与分隔的进程相比,进程中的线程之间的隔离程度要小.它们共享内存.文件句柄和 ...
- 【原】Sql Server 2008---安装时卸载Visual Studio
由于数据库连接不上,所以卸载数据库,然后安装的时候出问题报错,结果是因为vs, 所以就有了卸载vs这一步.某些图片借用一下. 1. 打开电脑中的控制面板--程序和功能 2.找到要卸载的软件,但是卸载过 ...
- 网页在ios下点击无效的原因
之前在做一个项目的时候,发现元素在ios系统中点击无法触发效果,网上查了一下发现 ios下 如果不是button,input这类标签的话 ,如果有点击事件的话最好给加一个css样式cursor:p ...
- maven Spring+Spring MVC+Mybatis+mysql轻量级Java web开发环境搭建
之前一直在做的一个GIS系统项目,采用了jsp+servlet框架,数据传输框架采用了apache的thrift框架,短时多传的风格还不错,但是较其他的java web项目显得有点太臃肿了,现在给大家 ...
- HTML5+CSS3静态页面项目-BusinessTheme的总结
因为期末考试.调整心态等等的种种原因,距离上一次的项目练习已经过了很久了,今天终于有时间继续练习HTML5+CSS3的页面架构和设计稿还原.设计图很长,整个页面分为了好几个区域,所以就不放完整的设计图 ...
- 关于在eclipse上部署Tomcat时出现8080等端口被占用问题的解决方法
问题描述: 在eclipse中部署Tomcat时,出现如下错误. 解决方法如下: 方法一: 1.开始->cmd->输入命令netstat -ano出现下图所示(注意下边显示有些错位,最后一 ...
- 使用gulp实现文件压缩及浏览器热加载
一.安装gulp 首先,你要安装过nodejs,如果没有安装过的同学请自行下载. 先再命令行里输入 npm install gulp -g 下载gulp 二.创建gulp项目 创建一个你需要 ...
- eclipse 设置 默认编码为 utf-8
学习javaweb时,开发工具都采用utf-8的编码方式,给eclipse设置默认编码为utf-8的编码方法 菜单 Window -> preference -> General -> ...
- Selenium的简单安装和使用
Selenium的安装 pip install selenium Selenium模块需要调用浏览器,需要配置selenium的浏览器驱动 Firefox(火狐) 下载对应版本的geckdriver. ...