正文
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接收。