前言

前段时间 Oculus 的 SDK 频繁更新,很多已有的教程都不再适用于现在的版本了。本系列文章的主要目的是记录现版本常见功能的实现方法,便于自己后续开发。当然,不排除我文章刚写完 SDK 又变了的可能性,所以如果有人发现文章的内容已经不适用于新版本了,也可以留评论或者私信我,我会持续更新文章内容。

当前适用版本:

  • Unity 版本:2021.3.7f1c1
  • Oculus Interaction SDK 版本:47.0

文章最近更新日期:2023.02.20


环境准备

项目创建与添加 SDK 的具体方式不再描述,之前的文章中有提到过

【Oculus Interaction SDK】(一)设置 VR 相机与控制器 & 实现简单的抓取功能 - 千叶Christa - 博客园 (cnblogs.com)

创建一个新场景,删除原相机,在 Project 窗口搜索 OculusInteractionSampleRig,并将其添加到场景中

制作所需的手势

创建一个空物体 Poses 作为要制作的所有手势的父级,在它之下再创建一个空物体 Bunny Right(右手的兔子手势),用来记录我们需要测试的手势

为 Bunny Right 添加 Shape Recognizer Active StateHand Ref 组件,并完成组件之间的引用

注:文章中用到的手是右手,如需使用左手,请引用 LeftHand

接下来,我们需要为手势记录器(Shape Recognizer Active State)添加手势

在 Assets 文件夹下新建一个 Hand Pose 文件夹,用于存放手势相关的数据文件

右键 > Create > Oculus > Interaction > SDK > Pose Detection > Shape,创建一个手势文件 Bunny

我们可以通过这个文件来创建想要的手势(图中设置为兔子手势)

关于手势设置的详细信息,可以参照这篇文章

【Oculus Interaction SDK】(十一)关于手势识别中手势设置的详细信息 - 千叶Christa - 博客园 (cnblogs.com)

实现手势识别功能

把设置好的手势 Bunny 添加到 Shape Recognizer Active State 的手势列表中

接着添加一个 Active State Selecter 组件,并引用 Shape Recognizer Active State 组件,这样我们就可以检测手的姿态了

现在,我们需要检测手势识别的效果

在场景中新建一个 Cube,设置好大小和位置,并添加 Selector Debug Visual 来可视化手势的检测结果

测试下效果

从上面的测试结果来看,我们的手势姿态已经可以被检测到了。但是当我压下手腕做出“剪刀”手势的时候,检测器依旧会把手势识别为“兔子”。

“剪刀”与“兔子”手势在手指设置上是相同的,但是对应的手掌与手腕的方向并不相同,能不能对这一点进行进一步的区分呢?

我们下一步就来解决这个问题!

设置手腕与手掌的方向限制

回到 Bunny Right,添加 Transform Recognizer Active State 组件

  • 在 Hand 处引用 Hand Ref 获取手的姿态
  • 在 Transform Feature Configs 处选择 Palm Away From Face(手掌远离面部),并标记为 True
  • 在 Up Vector Type 处选择 World,使手势的向上的方向与世界保持一致
  • 在 Feature Thresholds 处打开选择器,选择默认的特征阈值文件

 

Feature Threshold 文件保存了每个手指的阈值配置,你也可以创建一个新的阈值文件要保存自定义的设置(在这里我直接使用了默认文件)

回到 Punny Right,现在我们有两个手势识别器:Shape Recognizer Active State 和 Transform Recognizer Active State

但是在 Cube 的 Selector Debug Visual 组件上只能引用一个识别器

这个问题该如何解决呢?

为 Punny Right 添加 Active State Group 组件,将两个识别器都添加到 Active States 列表中,并将 Logic Operator 改为 AND(同时满足两个条件)

在 Active State Selector 处引用 Active State Group,这样就完成了!

大功告成!


参考资料

Hand Pose Detection with Oculus Interaction SDK - YouTube

【Oculus Interaction SDK】(十)在 VR 中使用手势识别的更多相关文章

  1. 【Oculus Interaction SDK】(一)设置 VR 相机与控制器 && 实现简单的抓取功能

    前言 前段时间 Oculus 的 SDK 频繁更新,很多已有的教程都不再适用于现在的版本了.本系列文章的主要目的是记录现版本常见功能的实现方法,便于自己后续开发.当然,不排除我文章刚写完 SDK 又变 ...

  2. 【Oculus Interaction SDK】(三)限制可操作物体的移动 / 旋转

    前言 这篇文章是[Oculus Interaction SDK]系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言.如果文章的内容已经不适用于新版本了,也可以直接联系我 ...

  3. 【Oculus Interaction SDK】(二)抓取释放效果的物理优化

    前言 这篇文章是[Oculus Interaction SDK]系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言.如果文章的内容已经不适用于新版本了,也可以直接联系我 ...

  4. 【Oculus Interaction SDK】(六)实体按钮 && 按压交互

    前言 这篇文章是[Oculus Interaction SDK]系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言.如果文章的内容已经不适用于新版本了,也可以直接联系我 ...

  5. 【Oculus Interaction SDK】(五)设置不同的抓握手势

    前言 这篇文章是[Oculus Interaction SDK]系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言.如果文章的内容已经不适用于新版本了,也可以直接联系我 ...

  6. VR中的Redirection

    在虚拟现实(Virtual Reality,VR)中,很重要的一点就是用户的在虚拟环境中的漫游(navigation).除了固定视点的VR电影,一般的VR应用,特别是游戏或者其他交互式的应用,都会依赖 ...

  7. VR中的“寻路(wayfinding)”

    虚拟现实(VR)中很重要的一个问题就是Locomotion(用户在VR中的移动).这个Locomotion分为两种,一种是点对点的,如传送门的方式,一种是包含了可以操控的中间过程的,这种被称为“导航( ...

  8. 什么是VR中的Locomotion?

    Locomotion,本文中我称之为移位,是VR研究中最重要的话题之一.因为它属于VR中三大元老级操作(Selection选择,Manipulation操纵物体,Locomotion移位),其中,前两 ...

  9. 浅谈html5在vr中的应用

    使用过HTML5制作动画过程的开发者都知道,HTML5页面给人一种逼真的感觉,同时HTML也是可以制作VR页面,但是需要你熟练HTML5与JavaScript开发过程,所以在有必要的情况下,我们可以用 ...

  10. 【笔记】android sdk集成的eclipse中导入项目

    android sdk集成的eclipse中导入项目 想要把旧的ADT项目,一模一样的导入进来,需要: 1.把项目放到,非当前ADT的workspace目录下: 2.从Project中Import,选 ...

随机推荐

  1. UBOOT编译--- UBOOT的顶层config.mk(五)

    1. 前言 UBOOT版本:uboot2018.03,开发板myimx8mmek240. 2. 概述 此文件包含在 ./Makefile 和 spl/Makefile 中. 清理状态以避免添加两次相同 ...

  2. day20-web开发会话技术02

    WEB开发会话技术02 6.Cookie的生命周期 默认情况下,Cookie只在浏览器的内存中存活,也就是说,当你关闭浏览器后,Cookie就会消失.但是也可以通过方法设置cookie的生存时间. c ...

  3. linux系统移植

    1 linux环境搭建 1.1 添加交叉开发工具链 新建如下工程目录: gcc-4.6.4.tar.xz #拷贝 tar -Jxvf gcc-4.6.4.tar.xz #解压 cd ./gcc-4.6 ...

  4. 关于mysql远程连接失败的问题解决

    解决办法 mysql 数据库user表配置密码 mysql 数据库user表配置plugin字段为mysql_native_password mysql 数据库user表host字段更改为% mysq ...

  5. CAP 7.0 版本发布通告 - 支持延迟消息,性能炸了?

    前言 今天,我们很高兴宣布 CAP 发布 7.0 版本正式版,我们在这个版本中带来了大批新特性以及对性能的优化和改进. 自从今年 1月份发布 6.0 版本以来,已经过去了快1年的时间.在过去的将近1年 ...

  6. jmeter ORA-00911: invalid character报错解决方法

    今天通过jmeter进行Oracle数据库操作时,遇到一个小坑. 解决办法:去掉sql最后的分号.

  7. Flink同步Kafka数据到ClickHouse分布式表

    公众号文章都在个人博客网站:https://www.ikeguang.com/ 同步,欢迎访问. 业务需要一种OLAP引擎,可以做到实时写入存储和查询计算功能,提供高效.稳健的实时数据服务,最终决定C ...

  8. Blazor和Vue对比学习(进阶.路由导航一):基本使用

    Blazor和Vue都是单文件组件SPA,路由的实现逻辑非常相似,页面路径的改变都是组件的切换,但因为各自语言的特性,在实现方式上有较大差异. 一.安装 1.Vue:Router是Vue的一个插件.如 ...

  9. day31-JQuery04

    JQuery04 6.jQuery的DOM操作02 6.9常用遍历节点方法 取得匹配元素的所有子元素组成的集合:children(),该方法只考虑子元素而不考虑任何后代元素 取得匹配元素后面的同辈元素 ...

  10. Linux—软件管理

    Linux 软件管理 1.软件管理简介 Redhat和Centos中软件管理是依靠软件包管理器(RPM)来实现的. RPM(Redhat Package Manager)软件包管理器提供了在linux ...