版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Testiness_Wind/article/details/79387589
今天琢磨了一下滑动的实现,我希望实现的功能呢,是用户在手机上滑动一下手指,AR物体就旋转一下,当然用户左滑左转,右滑右转。利用射线获取到用户看到的AR模型,然后实现滑动屏幕旋转AR模型。
先上代码:
版本号:untiy 2017.3
首先是定义的字段
private Vector3 firstPos;//玩家初次点击的位置
private Vector3 currentPos;//玩家当前点击的位置
private float time1;//计时器 记录玩家滑动屏幕的时间长短
private float time2=0.01f;//限定的时间间隔
然后是PC端的滑动,也就是鼠标点击滑动,这个可以用来在unity进行测试。
特别提示,不能写在FixedUpdate()中(别问我怎么知道的,试试就懂了)。
void Update()
{
#region 鼠标滑动检测
if (Input.GetMouseButtonDown(1))//记录玩家鼠标点击时的位置和时间信息
{
firstPos = Input.mousePosition;
currentPos = Input.mousePosition;
time1 = 0;
}
if (Input.GetMouseButton(1))//记录玩家鼠标滑动时的位置和时间信息
{
currentPos = Input.mousePosition;
time1 += Time.deltaTime;
}
if (Input.GetMouseButtonUp(1))//记录玩家鼠标抬起时的位置和时间信息
{
if (time1 > time2)
{
if (currentPos.x < firstPos.x)
{
print("向左滑动");
}
if (currentPos.x > firstPos.x)
{
print("向右滑动");
}
}
}
#endregion
}
最后是移动端的代码。也就是手指触摸屏幕滑动
void Update()
{
#region 触摸滑动检测
if (Input.touchCount == 1)//判断用户一根手指触摸屏幕
{
if(Input.GetTouch(0).phase == TouchPhase.Began)//按下
{
firstPos = Input.GetTouch(0).position;
currentPos = Input.GetTouch(0).position;
time1 = 0;
}
if (Input.GetTouch(0).phase == TouchPhase.Moved)//移动
{
currentPos = Input.GetTouch(0).position;
time1 += Time.deltaTime;
}
if (Input.GetTouch(0).phase == TouchPhase.Ended)//抬起
{
if (time1 > time2)
{
if (currentPos.x < firstPos.x)
{
print("向左滑动");
}
if (currentPos.x > firstPos.x)
{
print("向右滑动");
}
}
}
}
#endregion
}
看一下涉及到的几个API:
1.Input
Input是unity中所有输入指令的基类。
2.Input.GetMouseButtonDown(int button)
如果用户按下指定键,则返回一个true。
0代表左键,1代表右键,2代表中键。
3.Input.mousePosition
返回鼠标所在位置的位置信息,只读,返回值为Vector3类型。
4.Input.touchCount
用户触摸屏幕的点的数量,相当于用户用几根手指触摸,只读类型。
5.Input.GetTouch(int index).phase
描述触摸的阶段或者说是状态,状态共有四种,返回值是TouchPhase类型,这里引用一下圣典
6.Input.GetTouch(int index).position
记录触摸点的位置信息,返回值是Vector2类型。