Unity实现简单手势识别
作者:Maddie_Mo 发布时间:2022-10-14 07:52:05
标签: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 我吧。
来源:https://blog.csdn.net/weixin_43925843/article/details/105582675


猜你喜欢
- 今天给大家介绍一下SpringBoot中JPA的一些常用操作,例如:增删改查、分页、排序、事务操作等功能。下面先来介绍一下JPA中一些常用的
- 1.获取String osName =System.getProperties().getProperty(&quo
- choose标签用法choose 标签是按顺序判断其内部 when 标签中的 test 条件出否成立,如果有一个成立,则 choose 结束
- 引言Java届很难得有读百十行代码就能增加修炼的机会,这里有一个。通常,我在看书的时候一般不写代码,因为我的脑袋被设定成单线程的,一旦同时喂
- 本文实例讲述了C#生成二维码的方法。分享给大家供大家参考。具体实现方法如下:首先引用ThoughtWorks.QRCode.dll具体代码如
- 这一篇文章介绍SpringBoot应用修改默认打jar形式部署为打war包形式,部署到外部Tomcat。SpringBoot应用默认打包成为
- 首先我们设计了模块层次图,当然图中只是给出一种实现方式,不局限于此。具体见下图。主要功能介绍如下:1)请求接口层。处理HTTP请求,及响应2
- Java 执行CMD命令或执行BAT批处理背景日常开发中总能遇到一些奇怪的需求,例如使用java执行cmd命令或者bat批处理文件,今天就简
- 由于项目没有设计返回键,一旦进入别的应用,就无法回到桌面。只能通过串口输入input keyevent 4(返回键)来返回桌面,为了方便调试
- 抛出问题:Long a = 4l;Long b = 4l;a == b //trueLong a = 128l;Long b = 128l;
- 前言总结java常见的锁区分各个锁机制以及如何使用使用方法锁名考察线程是否要锁住同步资源乐观锁和悲观锁锁住同步资源后,要不要阻塞不阻塞可以使
- Android中手机震动的设置(Vibrator)的步骤: a、通过系统服务获得手机震动服务,Vibrator vibrator = (Vi
- public static IPAddress GetHostIP(){ &nbs
- 一、SpringCache介绍Spring Cache 是一个优秀的缓存组件。自Spring 3.1起,提供了类似于@Transaction
- Android Notification使用详解Notification核心代码(链式调用):适用于Android 4.0以上(
- IDEA设置Tab选项卡本人喜欢把tab选项卡全部放出来(tab选项卡默认是10个,超过后会把最先打开的挤出去,像队列一样先进先出),比如这
- shiro是一个权限框架,具体的使用可以查看其官网 http://shiro.apache.org/ 它提供了很方便的权限认证和
- 前言对于Java程序员,可以说对于ArrayList和LinkedList可谓是十分熟悉了对于ArrayList和LinkedList,他们
- 1、使用第三方类库 HtmlAgilityPack官方网址:https://html-agility-pack.net/?z=codeple
- 本文实例为大家分享了java利用udp实现发送数据的具体代码,供大家参考,具体内容如下1.udp的特点数据以包的形式发送数据udp是面向无连