HoloLens2:输入系统介绍

Jyadmin 提交于 周一, 09/16/2019 - 17:40

 

输入系统(术语)

在MRTK提供的所有功能中,输入系统是最大的系统之一。工具箱中的许多东西都是在它之上构建的(指针、焦点、预设)。输入系统中的代码允许在跨平台之间进行自然交互,比如抓取和旋转。

我们在这里说明一些有价值的术语:

数据源(Data providers)

在输入配置文件中对输入数据提供者的一个引用——换句话说它是输入设备的管理器。这个组件的作用是把底层系统的输入数据桥接成MRTK所使用的输入数据。其中一个例子是Windows混合现实(Windows Mixed Reality)的适配,它的工作是把通过Windows混合现实(Windows Mixed Reality)api输入的数据转化为MRTK所使用的输入数据。另外一个例子是OpenVR适配(它的工作室通过OpenVR api 得到输入动作并转化为MRTK所接受的数据)。

控制器(Controller)

物理控制器的抽象(包括所有的六轴手柄,HoloLens 1提供的空间手柄,全关节的手部捕捉器或者Leap Motion等等输入设备)。控制器派生于设备管理器(比如,一个WMR(windows混合现实)设备管理器会捕捉一个全关节的手,并管理他的生命期)

指针(Pointer)

控制器会通过指针来与游戏对象(game objects)进行交互。例如近距离交互指针,可以通过检测手(既控制器)何时靠近其宣称自己支持的“近距离交互”对象。隔空指针或者远距离指针(比如远距离射线指针),可以帮助我们处理超过我们手臂长度的远距离内容。

指针由设备管理器创建,然后附加到输入源。要获取控制器的所有指针,请执行以下操作:controller.InputSource.Pointers。

 

HoloLens2:输入系统

 

注意,一个控制器可以同时拥有许多不同的指针。但是为了确保操作顺利,在某一时刻只有一个指针会被激活(比如,中距离指针的使用会组织近距离指针)。以确保这不会陷入混乱中,有一个指针中介控制指针允许活跃(例如,近距离指针被激活的时候,远距离指针将会被关闭)。

焦点(Focus)

指针的事件将被发送给焦点对象。不同的指针类型将提供不同的焦点选择方案,比如手指戳的指针会通过一个球体的碰撞来选择焦点,而一个远距离的射线指针将会通过一个线来检测接收的焦点对象。所有焦点对象必须实现IMixedRealityFocusHandler接口来触发。我们也可以注册一个全局对象来接受所有指针事件,但我们在这里不推荐使用这种方法。

更新焦点对象的组件是FocusProvider。

光标(Cursor)

与指针关联的实体,它在指针交互周围提供额外的视觉提示。例如,手指光标会在你的手指周围呈现一个圆环,当你的手指接近“接近可交互”的物体时,圆环可以旋转。一个指针同时只能和一个光标关联相关联。

交互和操作(Interaction and Manipulation)

对象可以使用交互或操作脚本进行标记(这可能是Interactable.cs 或者NearInteractionGrabbable.cs / ManipulationHandler.cs)。

例如,NearInteractionGrabbable 和NearInteractionTouchable 允许某些指针(特别是靠近交互指针的指针)知道可以将焦点放在哪些对象上。

Interactable 和ManipulationHandler,这些组件,它们侦听指针事件来影响移动/缩放/旋转游戏对象的可视化表现。