这篇文章主要为大家详细介绍了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实现简单手势识别
猜你喜欢
- 如何使用C# 捕获进程输出 2023-03-10
- 在C# 8中如何使用默认接口方法详解 2023-03-29
- Unity3D实现渐变颜色效果 2023-01-16
- Oracle中for循环的使用方法 2023-07-04
- user32.dll 函数说明小结 2022-12-26
- C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
- .NET CORE DI 依赖注入 2023-09-27
- WPF使用DrawingContext实现绘制刻度条 2023-07-04
- Unity Shader实现模糊效果 2023-04-27
- c# 模拟线性回归的示例 2023-03-14