MRTK是一款面向WMR、HoloLens开发的MR开源工具
文章相关引用及参考:映维网
本文来自于设计师Dong Yoon Park
(映维网 2018年05月17日)Mixed Reality Toolkit-Unity(MRTK)(点击前往)是一款用于共享基础组件的开源项目,是常用交互和用户界面控件的构造块,可以帮助你在Unity中开发混合现实体验。
对于Mixed Reality Toolkit-Unity,我拣选了一些最常用的构造块和交互模式。对于每个构造块,我都会告诉你如何在存储库中找到示例场景,以及如何在项目中使用它们。
当你为HoloLens或其他WMR开发应用程序时,你需要为场景设置合适的输入模块,摄像头,光标或运动控制器,以便用户与内容进行交互。Mixed Reality Toolkit令这一切变得更加轻松。
一. 输入
1. 1示例场景
当你第一次开始开发混合现实应用程序时,这两个示例场景是你上手的理想之选。
-
HoloToolkit-Examples/Input/Scenes/InputManagerTest.unity(点击前往)
-
HoloToolkit-Examples/Input/Scenes/MotionControllerTest.unity(点击前往)
-
技术细节(点击前往)
InputManagerTest和MotionControllerTest场景
通过这些场景,你可以学习如何使用MRTK的InputManager,并且从运动控制器按钮访问数据处理事件
1.1 如何使用:自动场景设置
当你导入MRTK release Unity packages(点击前往)或者从GitHub资源库中克隆项目时,你将会在Unity中发现一个名为“Mixed Reality Toolkit”的新菜单。
在“Configure”菜单之下,你会看到“Apply Mixed Reality Scene Settings”的选项。
点击后,系统将移除默认的camera,并且添加基础组件:InputManager,MixedRealityCameraParent和DefaultCursor。
你同时可以从项目面板中手动添加它们。你可以将这些组件查找为预制件。当你搜索MixedRealityCamera时,你将能够看到两个不同的camera预制件。
不同之处在于,MixedRealityCamera仅用于camera的预制件,而MixedRealityCameraParent则包含用于WMR的附加组件,例如Teleportation,Motion Controller和Boundary。
MixedRealityCamera支持HoloLens和WMR头显。它检测设备类型并优化Skybox等属性。
下面你可以看到一些可以自定义的有用属性,如Cursor,Motion Controller模型,以及Floor。
二. 可交互对象
Interactable Object示例说明了如何为任意对象添加交互属性,并使其响应标准的输入状态,如注视,定位和按下。在混合现实中,按钮可以是从咖啡杯到气球的任何对象,它不一定是我们在2D屏幕中使用的扁平矩形。提供清晰的视觉反馈非常重要,这样可以方便用户判断什么属于可交互的对象。
2.1 示例场景
你可以在这个场景中找到Interactable Objects的例子:
2.2 如何使用
要为对象添加交互属性,你可以使用名为CompoundButton(点击前往)的系列脚本。它们是各种交互元素的模块化脚本,如网格,文本,动画,图标,声音和语音。
你可以按需混合和匹配这些脚本。
2.3 交互状态
- Disabled: 对象没有激活
- Observation: 光标不在对象之上,手没有抬起
- Observation Targeted: 光标在对象之上,手没有抬起
- Interactive: 光标不在对象之上,手准备做手势
- Targeted: 光标在对象之上,手准备做手势
- Pressed: 光标在对象之上,手做出悬空下按的手势
2.4 Interaction Receiver:在一个位置处理事件
Interaction Receiver是一个方便的构造块,允许你在一个位置处理来自多个对象的事件。
如图所示,Interaction Receiver可以存储一系列的对象,而且当接收事件时,它可以根据触发的对象执行某些操作。
2.5 如何使用
- 创建一个继承自Interaction Receiver的接收器脚本
- 在接收器中指定对象为Interactables
- 在Receiver脚本中,你可以利用GameObject obj处理事件
三. 边界框与应用栏
Bounding Box(边界框)是在WMR中操作对象的标准接口。你可以在HoloLens shell,以及WMR头显中的Cliff House(悬崖屋)中找到它。借助这个UI,你可以移动,旋转和缩放对象。应用程序栏用于显示对象的情景按钮。默认情况下,它显示“隐藏”,“调整”和“删除”按钮。你同时可以在AppBar预制件中添加其他自定义按钮。
3.1 示例场景
你可以在这个场景中找到Bounding Box&App Bar的例子:
3.2 如何使用
只需将BoundingBoxRig脚本(点击前往)分配给任何对象即可。BoundingBoxBasic预制件是获得蓝线可视化的必需条件。
TwoHandManipulatable属于可选脚本。这允许你用双手移动,旋转和缩放。默认情况下,Bounding Box不移动对象。
你同时可以将自定义按钮添加到AppBar。在项目面板中搜索AppBar预制件,然后在Inspector面板中找到Button属性。你可以调整按钮的数量,并且定义你的自定义按钮。
四. 两手操作
Two Hand Manipulation(双手操作)允许你使用双手操作对象。通过点击,按住,并移动双手,你可以缩放,旋转和移动对象。这与HoloLens RS4和Cliff House(悬崖屋)中的交互行为相同。这个也适用于运动控制器。它是一种操纵空间对象的直观方式。
4.1 示例场景
你可以在这个场景中找到Two Hand Manipulation(双手操作)的例子
4.2 如何使用
只需将TwoHandManipulatable脚本分配给任何对象即可。
五. 对象集合
借助Object Collection(对象集合),你可以轻松在3D空间中布置对象阵列。你可以指定曲面类型,行,半径,单元格宽度/高度和面向选项。有了这些不同的选项,你可以快速构建三维网格系统。
5.1 示例场景
你可以在这个场景中找到Object Collection(对象集合)的例子:
5.2 如何使用
- 创建一个空白的GameObject
- 添加对象
- 向GameObject指派Object Collection.cs
- 调整选项,并且点击“Update Collection”
六. 求解器系统
求解器系统允许你组合各种对象定位行为,并且按顺序运行它们。“开始”菜单是一个很好的示例,它包含了多种行为,如Tag-Along(尾随)+ Constant View Size(恒定视图大小) + Surface Magnetism(表面磁性)。它将在一定范围内尾随你,如果它与其他对象表面相碰撞,它会尾随表面并自动缩小或向上以保持大小。
模块化求解器脚本系列提供以下对象定位行为:
- Tag-along
- Billboarding
- Radial view
- Body lock
- Surface magnetism
- Constant view size
MRTK中提供一个简单的Tag-along脚本,但如果要结合多个定位机制(如Tag-along和Surface magnetism),Solvers的效果可能更好。
6.1 示例场景
你可以在这个场景中找到Object Collection的例子:
6.2 如何使用
- 创建一个对象
- 指定一个脚本
- 调整属性
七. 语音输入
语音输入是一种与混合现实对象交互的自然方式。它可以帮助用户缩短操作时间和减少工作量。WMR shell提供了诸如“选择”,“关闭”,“移动这个”和“面向我”等系统级命令。
借助MRTK,你可以轻松为体验添加语音命令。
7.1 示例场景
你可以在这个场景中找到语音输入的例子:
- HoloToolkit-Examples/Input/Scenes/SpeechInputSource.unity(点击前往)
7.2 如何使用
- 向场景添加SpeechInputSource
- 添加关键词
- 创建一个补充ISpeechHandler的新脚本
- 创建一个事件句柄OnSpeechKeywordRecognized
八. 空间理解
Spatial Understanding(空间理解)是HoloLens中最令人兴奋的功能之一。通过Spatial Understanding(空间理解),你可以分析环境并识别物理表面的类型,例如地板,天花板和墙壁。当利用这些物理表面时,你可以创建与现实环境交互的逼真全息图。
8.1 示例场景
MRTK提供了三个不同的例子。Spatial Mapping(空间映射), Spatial Processing(空间处理)和Spatial Understanding(空间理解)。
- Examples/SpatialMapping/Scenes/SpatialMapping(点击前往)
- Example.unityExamples/SpatialMapping/Scenes/SpatialProcessing.unity(点击前往)
- Examples/SpatialUnderstanding/Scenes/SpatialUnderstandingExample(点击前往)
- 空间映射与处理的技术细节(点击前往)
- 空间理解的技术细节(点击前往)
8.2 空间映射
只需拖放SpatialMapping预制件,你即可在获得这种类型的网格。这是令应用可以与环境交互的简单快捷方式。
8.3 空间处理
如果你希望获得更清晰的表面,你可以使用空间处理。通过合并顶点,空间处理可以把网格转换成平面。通过这个步骤,你可以为墙壁,桌子和地板获取更清晰的平面。
8.4 空间理解
这是最复杂的一个。示例场景显示了房间扫描体验,并为你提供识别的表面。借助这种技术,你可以把内容放置在特定的表面类型上。
九. 附加至控制器
如果要通过运动控制器为WMR头显打造一种体验,你可以使用AttachToController将任何对象和UI附加到控制器。
9.1 示例场景
你可以在Mixed Reality Academy Tutorial — Motion Controller中找到非常优秀的例子。
- https://docs.microsoft.com/en-us/windows/mixed-reality/mixed-reality-213HoloToolkit/Input/Scripts/Utilities/AttachToController.cs(点击前往)
9.2 如何使用
- 创建一个对象
- 指定脚本
- 调整属性
十. MRTK/StandardShader
MRTK/StandardShader是一款新的着色器,可提供各种效果,如发光边框,悬停突出显示和动画属性。借助这个着色器,你可以轻松实现Fluent Design System的元素,如光线,深度和材质等等。它已经进行了优化,可以在HoloLens中以60fps运行。
10.1 示例场景
你可以找到基于MRTK/Standard Shader的优秀材质例子
- HoloToolkit-Examples/StandardShader/Scenes/MaterialGallery.unity(点击前往)
MRTK/Standard Shader可以帮助你轻松实现近平面淡化效果
十一. 下一步
我在本文中介绍了MRTK中一些有用的构造块。我希望这可以为你混合现实之旅提供帮助。我同时希望你可以加入社区,提出问题,报告漏洞,贡献代码,为行业的发展做出贡献。