unity - 屏幕滑动操作方案
来源:互联网 发布:360mac版下线 编辑:程序博客网 时间:2024/06/06 09:01
目标:判断滑动屏幕方向,只调用一次滑动事件处理函数
因为功能简单易懂,代码也比较简单,不再详细说明,参考官方API:http://docs.unity3d.com/ScriptReference/EventType.html
using UnityEngine;using System.Collections;public class Player : MonoBehaviour {enum slideVector { nullVector, left, right };private Vector2 lastPos;//上一个位置private Vector2 currentPos;//下一个位置private slideVector currentVector = slideVector.nullVector;//当前滑动方向private float timer;//时间计数器public float offsetTime = 0.01f;//判断的时间间隔// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}void OnGUI(){if (Event.current.type == EventType.MouseDown) {//滑动开始lastPos = Event.current.mousePosition;currentPos = Event.current.mousePosition;timer = 0;//TODO click eventDebug.Log ("Click begin && Drag begin");}if (Event.current.type == EventType.MouseDrag) {//滑动过程currentPos = Event.current.mousePosition;timer += Time.deltaTime;if (timer > offsetTime) {if (currentPos.x < lastPos.x) {if (currentVector == slideVector.left) {return;}//TODO trun Left eventcurrentVector = slideVector.left;Debug.Log ("Turn left");} if (currentPos.x > lastPos.x) {if (currentVector == slideVector.right) {return;}//TODO trun right eventcurrentVector = slideVector.right;Debug.Log ("Turn right");}lastPos = currentPos;timer = 0;}}if (Event.current.type == EventType.MouseUp) {//滑动结束currentVector = slideVector.nullVector;Debug.Log ("Click over && Drag over");}}}
上次时间不多只写了一种方案,现在补充一下。
上方案可以实现目标功能,但是还有很多地方可以优化。
如:1:增加有效距离防止错误判断。2:功能可不可以在OnGUI上写(因为这样的话对于检测掌控不方便)。3:多样化判断。
为了解决以上问题,提出集中解决方法和优化方案。
首先,滑动判定的原理其实大家都懂,检测移动距离判定。我们只需要能检测到鼠标按下、鼠标按住、鼠标松开的三个状态即可。
一:使用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 eventlastVector = 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 eventlastVector = 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系统提供包括点击、按下、按住、移动、松开等多种与用户交互事件,只需要实现他们的函数接口便能实现对应效果,而且种类很多,读者可以试一试。
0 0
- unity - 屏幕滑动操作方案
- Unity - 延时操作方案
- Unity滑动屏幕控制物体的旋转
- Unity中实现在屏幕滑动获取滑动方向
- 利用NGUI组件简单识别滑动屏幕操作
- IOS中常用手势:手指向右滑动和向左滑动屏幕实现固定操作
- IOS中常用手势:手指向右滑动和向左滑动屏幕实现固定操作
- Unity中玩家通过点击行走 或 滑动屏幕行走的实现
- Unity中玩家通过点击行走 或 滑动屏幕行走的实现
- unity 安卓端通过滑动屏幕实现对物体的移动以及缩放
- wince屏幕滑动锁
- Android 判断屏幕滑动
- Android 屏幕滑动事件
- 屏幕滑动手势GestureDetector
- Android 屏幕滑动事件
- Android 屏幕滑动事件
- Android滑动屏幕效果
- Android 屏幕滑动事件
- 获取CPU编号
- ndk系列——使用Android Studio 初探NDK开发
- 《数据结构与算法》学习笔记18 递归_变位字
- myeclipse复制一个web项目部署之后不能访问
- centos下网络配置方法(网关、dns、ip地址配置)
- unity - 屏幕滑动操作方案
- HttpUtils网络请求
- 把PPT文件转换成PDF如何操作
- axis2调用WebService出现Timeout waiting for connection
- Tomcat中web.xml中url-pattern的配置详解
- 无线路由器的基础配置(二)
- ajax与302响应
- gentoo开启启动
- 从0起步学习Git——两者的区别