HoloLens开发手记 - Unity之Gestures手势识别

手势识别是HoloLens交互的重要输入方法之一。HoloLens提供了底层API和高层API,可以满足不同的手势定制需求。底层API能够获取手的位置和速度信息,高层API则借助手势识别器来识别预设的手势(包括,单击、双击、长按、平移等等)。

手势输入 Gesture Input



本部分为高级API使用,通过输入源来识别手势。每个手势对应一个SourceKind输入源,大部分手势事件都是系统预设的事件,有些事件会提供额外的上下文信息。

只需要很少的步骤就能使用GestureRecognizer集成手势识别:

  1. 创建GestureRecognizer实例
  2. 注册指定的手势类型
  3. 订阅手势事件
  4. 开始手势识别
 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运行获得输入来源的更多详细信息,例如它在世界中的位置和速度。

如何处理底层交互事件

使用底层交互是很容易的:

  1. 注册InteractionManager事件
  2. 处理事件

停止它也很容易:

  1. 取消注册事件

注册底层交互事件

对于每种你需要的底层事件,你都需要去注册它

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)
{
    // 来源被松开
}
时间: 2024-10-06 21:57:18

HoloLens开发手记 - Unity之Gestures手势识别的相关文章

HoloLens开发手记 - Unity development overview 使用Unity开发概述

Unity Technical Preview for HoloLens最新发行版为:Beta 24,发布于 09/07/2016 开始使用Unity开发HoloLens应用之前,确保你已经安装好了必要的工具,包括Unity HoloLens Technical Preview.Unity HoloLens Technical Preview是基于Unity 5.4 Beta版本来构建的,记得定期检查版本更新. 使用Unity是构建HoloLens全息应用最快的方式.推荐你花点时间来学习Unit

HoloLens开发手记 - Unity之摄像头篇

当你穿戴好HoloLens后,你就会处在全息应用世界的中心.当你的项目开启了"Virtual Reality Support"选项并选中了"Windows Holographic"后,Unity的摄像头组件会自动进行立体渲染,也会自动跟随你而移动或者旋转. 尽管如此,为了保证全息体验,以下选项需要你手动为所有摄像头设定: 混合现实渲染 Mixed Reality Rendering 摄像头定位 Positioning the Camera 视锥范围调整 Clip P

HoloLens开发手记 - Unity之语音输入

对于HoloLens,语音输入是三大基本输入方式之一,广泛地运用在各种交互中.HoloLens上语音输入有三种形式,分别是: 语音命令 Voice Command 听写 Diction 语法识别 Grammar Recognition 语音命令 Voice Command 对于做过Windows Phone或许Windows Store应用开发的人来说,语音命令是经常使用到的特性.开发者可以通过为应用设定关键词,和对应的行为,来为用户提供语音命令体验.当用户说出关键词时,预设的动作就会被调用.在

HoloLens开发手记 - Unity之Spatial Sounds 空间声音

本文主要讲述如何在项目中使用空间声音特性.我们主要讲述必须的插件组件和Unity声音组件和属性的设置来确保空间声音的实现. Enabling Spatial Sound in Unity 在Unity中启用空间声音 我们需要在Unity中使用声音插件来实现空间声音.这个插件(audio spatalizer plugin)被打包到了Unity,所以只需要在设置菜单中 Edit > Audio > Spatializer 启用Microsoft HRTF拓展就好.因为微软空间声音组件目前取样频率

HoloLens开发手记 - Unity之场景共享 Shared holographic experiences in Unity

佩戴HoloLens的多个用户可以使用场景共享特性来获取集合视野,并可以与固定在空间中某个位置的同一全息对象进行交互操作.这一切是通过空间锚共享(Anchor Sharing)来实现的. 为了使用共享服务,在AppxManifest文件中必须要启用SpatialPerception能力. Anchor Sharing 空间锚共享 在HoloLens扫描空间环境后,用户可以通过手动或者编程来选择建立一些空间锚.空间锚对象的信息的可以被序列化并传递给其他HoloLens设备,每一个设备都可以反序列化

HoloLens开发手记 - Unity之Locatable camera 使用相机

Enabling the capability for Photo Video Camera 启用相机能力 为了使用摄像头,我们必须启用WebCam能力. 在Unity中打开Player settings 展开Windows Store标签页 在"Publishing Settings > Capabilities"部分勾选WebCam能力 同一时刻只能执行一次相机操作.为了识别当前相机处在哪种模式下(拍照还是视频),你可以通过UnityEngine.VR.WSA.WebCam.

HoloLens开发手记 - Unity之Persistence 场景保持

Persistence 场景保持是HoloLens全息体验的一个关键特性,当用户离开原场景中时,原场景中全息对象会保持在特定位置,当用户回到原场景时,能够准确还原原场景的全息内容.WorldAnchorStore类是实现此特性的关键API,这保证了用户能够将任何全息对象贴到任何他们想要放置的位置. How to persist holograms across sessions 如何在整个会话中保持全息对象 WorldAnchorStore能够允许你保持场景中空间锚的位置,为了能够真正保持全息对

HoloLens开发手记 - Unity之World Anchor空间锚

World Anchor空间锚提供了一种能够将物体保留在特定位置和旋转状态上的方法.这保证了全息对象的稳定性,同时提供了后续在真实世界中保持全息对象位置的能力.简单地说,你可以为全息物体来添加空间锚点,这样就能在后续步骤中将全息物体准确恢复到它原来的位置. Adding a World Anchor 添加空间锚 命名空间: UnityEngine.VR.WSA 类型: WorldAnchor Unity中添加空间锚的方式很简单,如下: WorldAnchor anchor = gameObjec

HoloLens开发手记 - HoloLens真机上手简评

千呼万唤始出来,终于今天拿到了HoloLens真机. 设备概览 包装盒 本体 试戴 实际效果 GalaxyExplorer试玩 全息图像贴到现实场景表面 优点 宣传视频中的核心特性均已具备,而且正如前几天发出的<HoloLens开发手记-硬件细节 Hardware Detail>一文内容,HoloLens硬件细节均一致. 硬件性能略有提升,比西雅图时试用的体验机流畅了很多 修复了频繁重启的bug,发热略有降低 场景匹配流畅,准确率高 更多细节仍待发现 缺点 虽然HoloLens开发者版本好用了