HoloLens开发手记 - Unity之Gestures手势识别
手势识别是HoloLens交互的重要输入方法之一。HoloLens提供了底层API和高层API,可以满足不同的手势定制需求。底层API能够获取手的位置和速度信息,高层API则借助手势识别器来识别预设的手势(包括,单击、双击、长按、平移等等)。
手势输入 Gesture Input
本部分为高级API使用,通过输入源来识别手势。每个手势对应一个SourceKind输入源,大部分手势事件都是系统预设的事件,有些事件会提供额外的上下文信息。
只需要很少的步骤就能使用GestureRecognizer集成手势识别:
- 创建GestureRecognizer实例
- 注册指定的手势类型
- 订阅手势事件
- 开始手势识别
private GestureRecognizer recognizer; // Use this for initialization
void Start()
{
recognizer = new GestureRecognizer();
recognizer.SetRecognizableGestures(GestureSettings.Tap | GestureSettings.Hold);
recognizer.HoldStartedEvent += Recognizer_HoldStartedEvent;
recognizer.TappedEvent += Recognizer_TappedEvent;
//开始识别
recognizer.StartCapturingGestures();
} private void Recognizer_TappedEvent(InteractionSourceKind source, int tapCount, Ray headRay)
{
Debug.Log("Tap");
} private void Recognizer_HoldStartedEvent(InteractionSourceKind source, Ray headRay)
{
Debug.Log("hold");
} // Update is called once per frame
void Update()
{ } void OnDestory()
{
recognizer.TappedEvent -= Recognizer_TappedEvent;
recognizer.HoldStartedEvent -= Recognizer_HoldStartedEvent; }
停止手势识别
recognizer.StopCapturingGestures();
底层API Interaction Input
底层API运行获得输入来源的更多详细信息,例如它在世界中的位置和速度。
如何处理底层交互事件
使用底层交互是很容易的:
- 注册InteractionManager事件
- 处理事件
停止它也很容易:
- 取消注册事件
注册底层交互事件
对于每种你需要的底层事件,你都需要去注册它
InteractionManager.SourcePressed += InteractionManager_SourcePressed;
处理底层交互事件
一旦注册了底层交互事件,在事件发生时你就可以得到回调。你可以使用获取到的时间信息来处理应用行为。
void InteractionManager_SourcePressed(InteractionSourceState state)
{
// state变量里包含以下信息:
// 当前凝视射线信息
// 来源是否被点击
// 位置、速度之类的属性
// 来源id和来源类型 (hand, voice, controller或其他)
}
如何停止交互事件
当你不再想要关注一些事件后,只需要取消时间注册即可。
InteractionManager.SourcePressed -= InteractionManager_SourcePressed;
输入源变化事件
这些事件描述了输入源的当前状态:
- detected(即将激活)
- lost(即将取消激活)
- updates(移动或者一些状态在变化)
- is pressed(点击、按钮按下或者语音选中)
- is released(点击结束,按钮松开,语音选中结束)
输入源状态
每个事件都会有一个InteractionSourceState参数,这个参数代表了实时输入源状态:
- 是否是点击状态
- InteractionSourceProperties包含了输入源位置信息 InteractionSourceLocation,能够获得当前输入源位置和速度信息
- 凝视射线信息,用于判断事件发生时用户是否在注视目标
- 来源类型信息,包括hand、voice、controller或者其他类型
示例代码
using UnityEngine.VR.WSA.Input; void Start ()
{
InteractionManager.SourceDetected += InteractionManager_SourceDetected;
InteractionManager.SourceUpdated += InteractionManager_SourceUpdated;
InteractionManager.SourceLost += InteractionManager_SourceLost;
InteractionManager.SourcePressed += InteractionManager_SourcePressed;
InteractionManager.SourceReleased += InteractionManager_SourceReleased;
} void OnDestroy()
{
InteractionManager.SourceDetected -= InteractionManager_SourceDetected;
InteractionManager.SourceUpdated -= InteractionManager_SourceUpdated;
InteractionManager.SourceLost -= InteractionManager_SourceLost;
InteractionManager.SourcePressed -= InteractionManager_SourcePressed;
InteractionManager.SourceReleased -= InteractionManager_SourceReleased;
} void InteractionManager_SourceDetected(InteractionSourceState state)
{
// 识别到来源
} void InteractionManager_SourceLost(InteractionSourceState state)
{
//丢失来源
} void InteractionManager_SourceUpdated(InteractionSourceState state)
{
//来源被更新
} void InteractionManager_SourcePressed(InteractionSourceState state)
{
//来源被按下
} void InteractionManager_SourceReleased(InteractionSourceState state)
{
// 来源被松开
}
HoloLens开发手记 - Unity之Gestures手势识别的更多相关文章
- HoloLens开发手记 - Unity development overview 使用Unity开发概述
Unity Technical Preview for HoloLens最新发行版为:Beta 24,发布于 09/07/2016 开始使用Unity开发HoloLens应用之前,确保你已经安装好了必 ...
- HoloLens开发手记 - Unity之摄像头篇
当你穿戴好HoloLens后,你就会处在全息应用世界的中心.当你的项目开启了"Virtual Reality Support"选项并选中了"Windows Hologra ...
- HoloLens开发手记 - Unity之Spatial mapping 空间映射
本文主要讨论如何在Unity项目中集成空间映射功能.Unity内置了对空间映射功能的支持,通过以下两种方式提供给开发者: HoloToolkit项目中你可以找到空间映射组件,这可以让你便捷快速地开始使 ...
- HoloLens开发手记 - Unity之Tracking loss
当HoloLens设备不能识别到自己在世界中的位置时,应用就会发生tracking loss.默认情况下,Unity会暂停Update更新循环并显示一张闪屏图片给用户.当设备重新能追踪到位置时,闪屏图 ...
- HoloLens开发手记 - Unity之Recommended settings 推荐设置
Unity提供了大量的设置选项来满足全平台的配置,对于HoloLens,Unity可以通过切换一些特定的设置来启用HoloLens特定的行为. Holographic splash screen 闪屏 ...
- HoloLens开发手记 - Unity之Gaze凝视射线
凝视是HoloLens首要输入方式,形式功能类似于桌面系统的光标,用于选择操作全息对象.然而在Unity中并没有明确的Gaze API或者组件. 实现Gaze Implementing Gaze 概念 ...
- HoloLens开发手记 - Unity之语音输入
对于HoloLens,语音输入是三大基本输入方式之一,广泛地运用在各种交互中.HoloLens上语音输入有三种形式,分别是: 语音命令 Voice Command 听写 Diction 语法识别 Gr ...
- HoloLens开发手记 - Unity之Persistence 场景保持
Persistence 场景保持是HoloLens全息体验的一个关键特性,当用户离开原场景中时,原场景中全息对象会保持在特定位置,当用户回到原场景时,能够准确还原原场景的全息内容.WorldAncho ...
- HoloLens开发手记 - Unity之Spatial Sounds 空间声音
本文主要讲述如何在项目中使用空间声音特性.我们主要讲述必须的插件组件和Unity声音组件和属性的设置来确保空间声音的实现. Enabling Spatial Sound in Unity 在Unity ...
随机推荐
- Effective Java 52 Refer to objects by their interfaces
Principle If appropriate interface types exist, then parameters, return values, variables, and field ...
- npm报错Error: ENOENT, stat 'D:\NodeLearn\node-global'
最近想试下当前的当红炸子鸡 Nodejs,在安装配置时,发生了下面的错误: C:\nodejs\npmjs\bin>cd .. C:\nodejs\npmjs>cd .. C:\nodej ...
- PHP面试题集之基础题
1.用PHP打印出前一天的时间格式是 2006-5-10 22:21:21 date_default_timezone_set('PRC'); //默认时区 echo "今天:", ...
- NoSQL介绍
NoSQL(Not Only SQL),是一种非关系型数据库:说到这里,大家需要了解关系型数据库和非关系型数据库的区别,可参考:从关系型数据库到非关系型数据库. NoSQL是以key-value形式存 ...
- 在Jena框架下基于MySQL数据库实现本体的存取操作
在Jena框架下基于MySQL数据库实现本体的存取操作 转自:http://blog.csdn.net/jtz_mpp/article/details/6224311 最近在做一个基于本体的管理系统. ...
- 第九章:四大组件之Broadcast Receiver
第九章:四大组件之Broadcast Receiver 一.广播的功能和特征 广播的生命周期很短,经过调用对象-->实现onReceive-->结束,整个过程就结束了.从实现的复杂度和 ...
- xml in hadoop ETL with pig summary
项目中需要把source为xml的文件通过flume放置到hdfs,然后通过MR导入到vertica中去,我之前做过简单的 尝试,是通过pig的piggybank的xmlloader然后Regex_e ...
- django中的站点管理
所谓网页开发是有趣的,管理界面是千篇一律的.所以就有了django自动管理界面来减少重复劳动. 一.激活管理界面 1.django.contrib包 django自带了很多优秀的附加组件,它们都存在于 ...
- WEB安全--CSRF防御
CSRF漏洞防御主要可以从三个层面进行,即服务端的防御.用户端的防御和安全设备的防御. 服务端的防御 目前服务器端防御CSRF攻击主要有5种策略(我知道的就这么多):验证HTTP Referer字段, ...
- function [ binary,decimal ] = num2binary16( number )
function [ binary,decimal ] = num2binary16( number ) %The IEEE 754 standard specifies a binary16 as ...