这篇文章主要为大家详细介绍了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 我吧。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持得得之家。
沃梦达教程
本文标题为:Unity实现简单手势识别
基础教程推荐
猜你喜欢
- linux – 如何在Debian Jessie中安装dotnet core sdk 2023-09-26
- 一个读写csv文件的C#类 2022-11-06
- C#类和结构详解 2023-05-30
- winform把Office转成PDF文件 2023-06-14
- C# 调用WebService的方法 2023-03-09
- ZooKeeper的安装及部署教程 2023-01-22
- C# List实现行转列的通用方案 2022-11-02
- C# windows语音识别与朗读实例 2023-04-27
- unity实现动态排行榜 2023-04-27
- C#控制台实现飞行棋小游戏 2023-04-22