本文实例为大家分享了Unity实现手势识别的具体代码,供大家参考,具体内容如下
代码很简单没有难度,都有注解,随便 看一看 就会了。
CallEvent () 方法需要自己搭载使用。
Unity代码
using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 手势识别 /// </summary> public class PlayerAnimator_ZH : MonoBehaviour { //鼠标第一次点击位置 public Vector2 _MousePos; //位置枚举 public GestureState _GestureStateBe; //最小动作距离 private float _MinGestureDistance = 20.0f; //手势开启布尔 private bool _IsInvaild; void Update() { //手势方法 GestureOnClick(); } //手势方法 public void GestureOnClick() { //手势为空 _GestureStateBe = GestureState.Null; if (Input.GetMouseButtonDown(0)) { //第一次鼠标点击位置记录 _MousePos = Input.mousePosition; //开启手势识别 _IsInvaild = true; } if (Input.GetMouseButton(0)) { //鼠标轨迹向量 Vector2 _Dis = (Vector2)Input.mousePosition - _MousePos; //画线 Debug.DrawLine(_MousePos, (Vector2)Input.mousePosition, Color.cyan); //判断当前 向量的长度 是否大于 最小动作距离 if (_Dis.magnitude>_MinGestureDistance) { //判断在 空间 X轴 还是在 Y轴 if (Mathf.Abs(_Dis.x) > Mathf.Abs(_Dis.y) && _IsInvaild) { if (_Dis.x > 0) { //如果当前向量值 X 大于 0 就是 Right 状态 _GestureStateBe = GestureState.Right; } else if (_Dis.x < 0) { //如果当前向量值 X 小于 0 就是 Lift 状态 _GestureStateBe = GestureState.Lift; } } //判断在 空间 X轴 还是在 Y轴 else if (Mathf.Abs(_Dis.x) < Mathf.Abs(_Dis.y) && _IsInvaild) { if (_Dis.y > 0) { //如果当前向量值 Y 大于 0 就是 Up 状态 _GestureStateBe = GestureState.Up; } else if (_Dis.y < 0) { //如果当前向量值 Y 小于 0 就是 Down 状态 _GestureStateBe = GestureState.Down; } } //关闭手势识别 _IsInvaild = false; } } } //呼叫事件 public void CallEvent() { switch (_GestureStateBe) { case GestureState.Null: // Null 方法调用(自己写) break; case GestureState.Up: // Up 方法调用(自己写) break; case GestureState.Down: // Down 方法调用(自己写) break; case GestureState.Lift: // Lift 方法调用(自己写) break; case GestureState.Right: // Right 方法调用(自己写) break; default: break; } } //状态枚举 public enum GestureState { Null, Up, Down, Lift, Right } }
其实代码还可进行补充,比如左上、左下、右上、右下、叠加等等吧,如有问题就 Call 我吧。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自学编程网。
- 本文固定链接: https://zxbcw.cn/post/190583/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)