Unity实现简单手势识别

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

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

(0)

相关推荐

  • Unity实现简单手势识别

    本文实例为大家分享了Unity实现手势识别的具体代码,供大家参考,具体内容如下 代码很简单没有难度,都有注解,随便 看一看 就会了. CallEvent () 方法需要自己搭载使用. Unity代码 using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 手势识别 /// </summary> public class PlayerAnimato

  • Unity实现简单的虚拟摇杆

    本文实例为大家分享了Unity实现简单虚拟摇杆的具体代码,供大家参考,具体内容如下 需求:点击创建一个虚拟摇杆底盘,鼠标拖拽时候上方摇杆会跟随鼠标方向移动,并且不会超出摇杆盘范围 *摇杆功能另外实现 UI显示 using System.Collections; using System.Collections.Generic; using UnityEngine; public class RockingIcon : MonoBehaviour { public Transform touchP

  • unity实现简单的贪吃蛇游戏

    本文实例为大家分享了unity实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下 SatUIController代码 using UnityEngine; using UnityEngine.UI; public class StartUIController : MonoBehaviour { public Text lastText; public Text bestText; public Toggle blue; public Toggle yellow; public Toggle

  • unity实现简单计算器

    本文实例为大家分享了unity实现简单计算器的具体代码,供大家参考,具体内容如下 using System.Text; using UnityEngine; using UnityEngine.UI; using DG.Tweening; using System; public class Calculator : MonoBehaviour { public Text SpendText; private StringBuilder spendPrice;//初始金额 private str

  • Unity实现简单场景分层移动

    本文实例为大家分享了Unity实现简单场景分层移动的具体代码,供大家参考,具体内容如下 前言 开发游戏经常需要用到把前景.场景.背景等不同层级的物体进行不同速度的移动以实现真实感. 效果 云.建筑.地面.前景植被各层次场景分层移动. 代码 using UnityEngine; public class DistantView : MonoBehaviour { public GameObject follow; public float scaleOffset; public bool isHo

  • Unity实现简单虚拟摇杆

    本文实例为大家分享了Unity虚拟摇杆的简单实现代码,供大家参考,具体内容如下 简单的Unity虚拟摇杆实现,有详细注释. Game界面 Inspector界面 摇杆脚本 public class YaoGanCtrl : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { public RectTransform diPan; public RectTransform anNiu; public Vector2 d

  • Unity实现简单换装系统

    关于Unity的换装,网上有几篇文章,我之前也简单的描述过实现.不过那个时候只是粗略的试验了下.今天好好梳理了下代码. 先上代码(自己的游戏项目,不是公司的,所以放心的贴上项目代码了,部分引用到其他的功能文件,但是核心代码无影响,这里主要看一下细节和思路) using UnityEngine; using System.Collections; using System.Collections.Generic; public enum AvatarPart { helmet, chest, sh

  • unity实现简单贪吃蛇游戏

    本文实例为大家分享了unity实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 首先创建一个头部,编写脚本利用WASD控制头部的移动. Vector3 up=new Vector3(0,1,0); Vector3 down=new Vector3(0,-1,0); Vector3 left=new Vector3(-1,0,0); Vector3 right=new Vector3(1,0,0); Vector3 now;//头部实际前进方向 float timer=0f; float tim

  • Unity实现简单的多人聊天工具

    本文实例为大家分享了Unity实现多人聊天工具的具体代码,供大家参考,具体内容如下 代码1 : 服务端代码 using UnityEngine; using System.Net.Sockets; using System.Net; using System.Threading; public class ChatServer : MonoBehaviour {        // 设置连接端口        const int portNo = 500;        string m_Ser

  • Unity实现简单摇杆的制作

    利用UGUI制作一个简单摇杆,效果图 1.首先建立两个Image,然后将其中一个为父物体,另一个为子物体,并且调整好大小: ps:将子物体的锚点设置为居中 2.在父物体上写个JoyStick.cs脚本: using UnityEngine; using UnityEngine.EventSystems; using System.Collections; public class JoyStick : MonoBehaviour, IDragHandler, IEndDragHandler, I

随机推荐