Unity实现简单手势识别

时间:2021-05-20

本文实例为大家分享了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 我吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章