Unity实现屏幕滑动操作
发表于2019-01-16
本篇文章主要给大家分享下如何判断滑动屏幕方向,只调用一次滑动事件处理函数。首先,滑动判定的原理其实大家都懂,检测移动距离判定。我们只需要能检测到鼠标按下、鼠标按住、鼠标松开的三个状态即可。
因为功能简单易懂,代码也比较简单,不再详细说明,参考官方API:http://docs.unity3d.com/ScriptReference/EventType.html
一、使用Input.GetMouseButtonDown(0)
这种方法应该是我们最熟悉的,不多说直接上代码:
if (Input.GetMouseButtonDown (0)) {
lastPos = Input.mousePosition;
currentPos = Input.mousePosition;
timer = 0;
}
if (Input.GetMouseButton (0)) {
currentPos = Input.mousePosition;
timer += Time.deltaTime;
if (timer > offsetTime) {
if (currentPos.x < lastPos.x) {
if (currentVector == slideVector.left) {
return;
}
//TODO trun Left event
lastVector = slideVector.left;
currentVector = slideVector.left;
if (player != null) {
player.AttackLeft ();
}
//Debug.Log ("Turn left");
}
if (currentPos.x > lastPos.x) {
if (currentVector == slideVector.right) {
return;
}
//TODO trun right event
lastVector = slideVector.right;
currentVector = slideVector.right;
if (player != null) {
player.AttackRight ();
}
//Debug.Log ("Turn right");
}
lastPos = currentPos;
timer = 0;
}
}
if (Input.GetMouseButtonUp (0)) {
if (lastVector != slideVector.nullVector && currentVector == slideVector.nullVector) {
if (lastVector == slideVector.left) {
//TODO trun Left event
//Debug.Log("click attack left++++++++++++");
player.AttackLeft();
} else {
//Debug.Log("click attack right++++++++++++");
player.AttackRight();
}
}
currentVector = slideVector.nullVector;
}
这种方法很好理解,可以直接运行或修改,跟上面的比增加了有效距离的判定,想要增加其他滑动检测在基础上简单修改即可。
说明:这种方法在Update中执行,开关检测需要用信号来实现。还有一种方式就是把检测放在协程里面,利用开关协程来开关检测。本方法是全屏的,不论是在控件上滑动还是在空白区域都生效。若不想在控件上生效,请自行做遮罩处理。
其他方法:利用UGUI的Event系统,UGUIEvent系统提供包括点击、按下、按住、移动、松开等多种与用户交互事件,只需要实现他们的函数接口便能实现对应效果,而且种类很多,读者可以试一试。
