CheckFingerOpenToHand()方法是我根据原作者的方法改的,因为用他的方法感觉这个方法不通用,本人很懒,为了以后的幸福生活就小改了一下,如果你想判断某个手指是否打开(0~5个手指),你可以定义这样一个数组,如:

我想判断食指跟中指打开:就可以下面这样写,再将这个数组传进方法里,他会给你返回一个bool 值,哈哈

开心,牛逼,自己觉得这个方法写的很实用,想判断几个手指打开都行

 Finger.FingerType[] arr = { Finger.FingerType.TYPE_INDEX, Finger.FingerType.TYPE_MIDDLE };
using System.Collections;
using System.Collections.Generic;
using Leap;
using Leap.Unity;
using UnityEngine;public class JudgeSwipe : MonoBehaviour {public HandModelBase leftHandModel;[Tooltip("Velocity (m/s) move toward ")]protected float deltaVelocity = 0.7f;//这里传进来你要打开的手指 紧握手指 {} 传一个手指{Finger.FingerType.TYPE_RING}...以此类推,当传进5个值得时候代表 手张开,当传进0个值的时候代表 握手Finger.FingerType[] arr = { Finger.FingerType.TYPE_INDEX, Finger.FingerType.TYPE_MIDDLE };// Update is called once per framevoid Update() {if (!leftHandModel.IsTracked) return;Hand leftHand = leftHandModel.GetLeapHand();//if (IsMoveLeft(leftHand))//{//    print("左手向左滑动");//}//if (IsMoveRight(leftHand))//{//    print("左手向右滑动");//}//if (IsMoveUp(leftHand))//{//    print("左手向上滑动");//}//if (IsMoveDown(leftHand))//{//    print("左手向下滑动");//}//if (IsCloseHand(leftHand))//{//    print("握拳");//}//if (IsOpenFullHand(leftHand))//{//    print("张手");//}//if (CheckFingerCloseToHand(leftHand))//{//    print("四指指向掌心");//}if (CheckFingerOpenToHand(leftHand,arr)){print("ok");}}/// <summary>/// 这个方法用来扩展哪几个手指打开,这里传进来你要判断是否打开的手指 紧握手指 {} 传一个手指{Finger.FingerType.TYPE_RING}.../// 以此类推,当传进5个值得时候代表 手张开,当传进0个值的时候代表 握手/// </summary>/// <param name="hand"></param>/// <param name="arr"></param>/// <returns></returns>bool CheckFingerOpenToHand(Hand hand, Finger.FingerType[] fingerTypesArr,float deltaCloseFinger = 0.05f){List<Finger> listOfFingers = hand.Fingers;float count = 0;// 遍历5个手指for (int f = 0; f < listOfFingers.Count; f++){Finger finger = listOfFingers[f];// 判读每个手指的指尖位置和掌心位置的长度是不是小于某个值,以判断手指是否贴着掌心if ((finger.TipPosition - hand.PalmPosition).Magnitude < deltaCloseFinger){// 如果传进来的数组长度是0,有一个手指那么 count + 1,continue 跳出,不执行下面数组长度不是0 的逻辑if (fingerTypesArr.Length == 0){count++;continue;}// 传进来的数组长度不是 0,for (int i = 0; i < fingerTypesArr.Length; i++){// 假如本例子传进来的是食指和中指,逻辑走到这里,如果你的食指是紧握的,下面会判断这个手指是不是食指,返回 falseif (finger.Type == fingerTypesArr[i]){return false;}else{count++;}}}}if (fingerTypesArr.Length == 0){return count == 5;}// 这里除以length 是因为上面数组在每次 for 循环 count ++ 会执行 length 次return (count/ fingerTypesArr.Length == 5 - fingerTypesArr.Length);}/// <summary>/// 判断是否抓取/// </summary>/// <param name="hand"></param>/// <returns></returns>bool isGrabHand(Hand hand){return hand.GrabStrength > 0.8f;}/// <summary>/// 判断是不是握拳/// </summary>/// <param name="hand"></param>/// <returns></returns>bool IsCloseHand(Hand hand){List<Finger> listOfFingers = hand.Fingers;int count = 0;for (int f = 0; f < listOfFingers.Count; f++){Finger finger = listOfFingers[f];if ((finger.TipPosition - hand.PalmPosition).Magnitude < 0.05f){count++;}}return (count == 4);}/// <summary>/// 判断手指是否全张开/// </summary>/// <param name="hand"></param>/// <returns></returns>bool IsOpenFullHand(Hand hand){return hand.GrabStrength == 0;}/// <summary>/// 手滑向左边/// </summary>/// <param name="hand"></param>/// <returns></returns>protected bool IsMoveLeft(Hand hand)   // 手划向左边{//x轴移动的速度   deltaVelocity = 0.7f   return hand.PalmVelocity.x < -deltaVelocity;}/// <summary>/// 手滑向右边/// </summary>/// <param name="hand"></param>/// <returns></returns>protected bool IsMoveRight(Hand hand){return hand.PalmVelocity.x > deltaVelocity;}/// <summary>/// 手滑向上边/// </summary>/// <param name="hand"></param>/// <returns></returns>protected bool IsMoveUp(Hand hand){return hand.PalmVelocity.y > deltaVelocity;}/// <summary>/// 手滑向下边/// </summary>/// <param name="hand"></param>/// <returns></returns>protected bool IsMoveDown(Hand hand){return hand.PalmVelocity.y < -deltaVelocity;}/// <summary>/// 判断四指是否靠向掌心/// </summary>/// <param name="hand"></param>/// <returns></returns>bool CheckFingerCloseToHand(Hand hand){List<Finger> listOfFingers = hand.Fingers;int count = 0;for (int f = 0; f < listOfFingers.Count; f++){Finger finger = listOfFingers[f];if ((finger.TipPosition - hand.PalmPosition).Magnitude < 0.05f){if (finger.Type == Finger.FingerType.TYPE_THUMB){return false;}else{count++;}}}return (count == 4);}}

参考链接:https://blog.csdn.net/qq_31411825/article/details/54773801

unity + leapMotion 手势识别入门教程相关推荐

  1. Unity shader新手入门教程:实现汽车氮气加速特效

    1:材质和shader Shader 是一种給GPU执行的代码,GPU的渲染流水线,为了方便开发人员定制效果,开放出接口給程序员编写代码来控制,这种程序叫作shader, shader开发语言,coc ...

  2. LeapMotion在unity中保姆级使用教程

    一.插件 1.下载资源包,包括:Core为核心引擎,Interaction Engine为实现虚拟物体交互的插件,hands提供手势渲染等. Ultraleap Plugin for Unity - ...

  3. unity ui框架_[教程汇总+持续更新]Unity从入门到入坟——收藏这一篇就够了

    ----------------塔防(更新中),作者重写了基础篇(下方目录为:1.1(新) 基础)目前还在持续连载了5篇,因为不多我们更新完就能追到原作者的进度了------------------- ...

  4. Unity游戏开发官方入门教程:飞机大战(六)——创建子弹

    Unity版本:Unity 2018.2.14f1 原视频链接:https://unity3d.com/cn/learn/tutorials/s/space-shooter-tutorial 教程目录 ...

  5. 【Unity3D入门教程】Unity着色器基本使用方法

    前言 "Shader即着色器,是一款运行在GPU上的程序,用来对三维物体进行着色处理.光与影的计算.纹理颜色的呈现等,从而将游戏引擎中的一个个作为抽象的几何数据存在的模型.场景和特效,以和真 ...

  6. unity Shader Lab(cg hlsl glsl)着色器入门教程 以及 vs2019 支持unity shader语法(更新中2019.9.5)

    前言: 如果你对cg glsl hlsl 顶点着色器 片段着色器 表面着色器 固定渲染管线 等等有所疑惑,或是想学会unity的渲染,看这一篇就足够了.另外我博客的shader分类中还有很多shade ...

  7. Unity制作汽车(入门教程)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Unity入门教程 前言 一.如何使用Wheel Conllider组件 二.让汽车动起来 1.新建一个脚本TEST_Car 2.完善 ...

  8. Unity游戏开发官方入门教程:飞机大战(二)——创建飞船对象

    Unity版本:Unity 2018.2.14f1 原视频链接:https://unity3d.com/cn/learn/tutorials/s/space-shooter-tutorial 教程目录 ...

  9. Unity游戏开发官方入门教程:飞机大战(五)——实现飞船控制脚本

    Unity版本:Unity 2018.2.14f1 原视频链接:https://unity3d.com/cn/learn/tutorials/s/space-shooter-tutorial 教程目录 ...

  10. Unity游戏开发官方入门教程:飞机大战(十)——敌人的爆炸和移动

    Unity版本:Unity 2018.2.14f1 原视频链接:https://unity3d.com/cn/learn/tutorials/s/space-shooter-tutorial 教程目录 ...

最新文章

  1. spring8: di依赖注入--构造注入
  2. 一些 Windows 命令行学习
  3. VTK:可视化之EdgePoints
  4. CentOS7防火墙firewalld和iptable的设置和使用
  5. 程序员妈妈的“work-life balance”,直面想象中的困难
  6. Python中什么是set
  7. vmware配置centos全套
  8. 教大家一个快速批量去水印下载快手视频、图集的方法技巧
  9. Zipf law 定律
  10. 深度卷积神经网络架构:从基本组件到结构创新
  11. Azure NSG网络安全组日志分析
  12. android 微信登陆功能,Android集成微信登录
  13. 分布式 | 如何通过 dble 的 split 功能,快速地将数据导入到 dble 中
  14. Docker架构简介 命令详解
  15. 皇帝成长计划html文件打不开,伯爵皇帝成长计划解决存档问题XP/win7/win8适用
  16. trickle_ice 原理
  17. 数字图像处理实验之图像压缩
  18. cocos2dx 在android下的帧频设置问题
  19. 饮用水中的氟化物超标怎么去除、除氟工艺介绍
  20. mysql经典问题四表查询(教师,学生,成绩,课程表)

热门文章

  1. 成本要素****没有被分配到成本组件结构01中的成本组件
  2. 2021年广东专精特新中小企业补助及小巨人企业补贴
  3. 手把手教你使用SPSS做出亚组分析的交互作用效应(p for Interaction)
  4. matplotlib 绘图可视化知识点整理
  5. 【React】react-redux 案例
  6. git squash 和 git rebase
  7. Mac磁盘格式化、分区教程
  8. 一文让你详细了解CPU的内部架构和工作原理(好文)
  9. ES新语法ES7、ES8、ES9、ES10新特性
  10. 无线路由器怎么改密码