昨天我们分享了《运用Unity开发HoloLens应用实战技巧(上)》,今天下篇将讲解Unity开发HoloLens应用的全息模拟器与交互设计。 附演讲的现场视频(时长30分钟,流量党随意): 全息模拟器 全息模拟器(Holographic Emulation)是一个新功能,可以大幅度减少Unity开发全息应用的迭代时间。Microsoft HoloLens的开发者们将可以直接使用Unity编辑器进行原型设计、调试和迭代设计,不必再花费过长的时间进行发布构建。并且给没有硬件设备的开发者也提供了很大的便利。它拥有两种模式:模拟模式和远程模式。 温馨提示: 如果要使用Unity编辑器自带的全息模拟器,操作系统必须为Windows 10 Anniversary版本。 模拟模式(Simulate in Editor) Room Room就是模拟场景所在的房间。一共5个选项,分别是:DefaultRoom、Bedroom1、Bedroom2、GreatRoom和LivingRoom。它们与HoloLens Emulation的模拟场景是一一对应的。
Gesture Hand 虚拟手掌,即设置模拟手势操作的虚拟。
手柄控制 在MR场景中需要有许多交互的体验,所以HoloLens可以使用手柄控制器来进行操作模拟器中的虚拟人物。 ![]() 控制器相关键位的作用:
以上这些操作基本能够涵盖MR大多数的交互操作。 远程模式(Remote to Device) 如果您有HoloLens硬件设备,Unity也提供了可以直接远程运行与调试的模式,来帮助开发者便利开发HoloLens应用。 ![]() 模式有以下几个参数:
![]() 连接到设备有三步。 首先,您需要安装并运行远程模式播放器(Holographic Remoting Player),可以从Windows应用商店下载。在设备上运行该应用,您将进入等待状态并显示设备的IP地址。可以访问Microsoft Windows Dev Center(微软Windows设备中心)了解如何开启连接会话的远程播放器等相关信息。 其次,在远程设备(Remote Machine)属性栏中输入设备的IP地址。字段右侧的下拉菜单中可以选择最近使用过的地址。 最后,点击“Connect(连接)”按钮。连接状态会变为带连接消息的绿色指示灯。现在您可以点击编辑器中的播放按钮并远程运行设备。您可以暂停、检查对象和调试,就像在编辑中运行普通应用一样,区别之处在于视频、音频和设备的输入是通过网络在主机和远程设备之间进行传输的。远程模式对于验证性能来说并不奏效(因为所有繁重工作都是由主机处理的),但它可用于在开发过程中进行快速迭代。 已知限制 在使用Holographic Emulation时,也有一些限制。 模拟模式
远程模式
交互开发 HoloLens有几种重要交互相关的开发内容,分别是Gaze凝视,Gesture手势,Voice Command语音控制,Spatial Mapping空间映射,Spatial Sound空间音效和World Coordinate坐标系统这几个方面。 ![]() 为了帮助开发者更好地开发HoloLens应用,微软在GitHub上提供了HoloToolkit-Unity插件,下文会从Unity原生API和Microsoft HoloToolkit-Unity两方面介绍这些交互开发的实战技巧。 Gaze凝视 Gaze凝视是VR项目中最最常见的交互方式。 Unity API Physics.Raycast( Camera.main.transform.position, Camera.main.transform.forward, // 这个就是凝视的方向 …) 如果了解Unity开发的话,原理其实很简单,就是从主摄像机的朝向视角发出一个射线,碰到游戏对象后再进行后续判断处理。 HoloToolkit API
开发中的注意事项
Gaze的距离设计 ![]() 从上图中可以看出来,HoloLens设计最佳凝视体验的距离是2米左右,而对象的大小是在5到10厘米左右。在大多数情况下,最小目标尺寸为1-1.5度应允许成功的用户操作,尽管3度的目标通常允许更高的速度。请注意,即使是3D元素,用户所针对的大小实际上也是2d区域 - 无论哪个投影面向它们都应该是可定位区域。 ![]() 使用“凝视”高亮目标对象的例子 Gesture手势 Gesture手势是MR设备特有的交互方式之一,通过摄像机捕捉体验者手势的动作,从而判定应该执行怎样的操作指令。 Unity API UnityEngine.VR.WSA.Input - 在这个类中,有许多手势识别与操作的方法。但是仅在Windows 10有效。 GestureRecognizer - 用于识别用户手势的API。 GestureRecognizer仅执行您要求的一组手势之间的最小消歧。 例如,如果您只要点击,用户可以按住他们的手指按住它们,只要他们喜欢,并且当用户释放手指时,点击仍然会发生。 有关手势类型的更多详细信息,请参阅GestureSettings。 GestureRecognizer将仅在StartCapturingGestures被调用后才会收到事件。 StopCapturingGestures可以再次调用来停止事件。 这允许GestureRecognizer根据需要被激活和停用,例如当用户凝视移动并远离对象时。 InteractionManager - 提供从手,控制器和系统语音命令访问用户输入。 InteractionSource - 表示可以导致交互和手势的一个检测到的手,控制器或用户声音的实例。 HoloToolkit API GesturesInput - 输入源自WSA API的手势信息,可以访问各种系统支持的手势。 InputManager - 一个预制件,用于管理HoloLens输入系统,目前支持的凝视和各种输入源,例如手和手势。还包括一个假的输入源,可以在编辑器中模拟手输入。 默认情况下,可以通过按住Shift(左手)或Space(右手),移动鼠标移动手并使用鼠标左键点按。 常用手势种类
手势功能的使用步骤 以Tap为例,使用Unity原生API,介绍从创建到最后解除的步骤:
尤其注意,最后的解绑事件不能忘记,在OnDestroy中一定要加入Event的“-=”操作。 Voice Commands(语音控制) 语音控制是非常有意思的交互方式,从理论上它解放了双手,藉以微软自有的语音控制的方式,也帮助开发者有更多设计创意的可能性。 Unity API UnityEngine.Windows.Speech - 在这个类中,有一些语音控制处理相关的API。但是仅在Windows 10有效。 KeywordRecognizer - 侦听语音输入,并尝试将发音短语与注册关键字列表相匹配。 GrammarRecognizer - 它是KeywordRecognizer的补充。 在许多情况下,开发人员会发现KeywordRecognizer满足他们所有的开发需求。 然而,在某些情况下,更复杂的语法将以XML文件的形式更好地表达。 语法识别器使用万维网联盟(W3C)语音识别语法规范(SRGS)1.0版中规定的可扩展标记语言(XML)元素和属性。 这些XML元素和属性表示定义由语音识别引擎识别的单词或短语(命令)的规则结构。有关此格式的信息,请参见http://www.w3.orgspeech-grammarspeech-grammar/或MSDN。 DictationRecognizer - 它用于听取语音输入,并尝试确定发音是什么。用户可以注册并听取假设和短语完成的事件。 Start()和Stop()方法分别启用和禁用听写识别。 使用识别器完成后,必须使用Dispose()方法进行处理,以释放其使用的资源。 如果垃圾收集之前没有释放,它将以额外的性能成本自动释放这些资源。 HoloToolkit API KeywordManager - 允许您在Unity编辑器的检视视图中指定关键字和方法,而不是在代码中明确注册它们。 使用语音控制的步骤如下:
[C#]
纯文本查看
复制代码
注意事项
Spatial Mapping(空间映射) 空间映射是将现实世界对象映射到虚拟世界中的过程。 这是为您的Windows全息应用程序提供更好的现实世界交互的好方法。 Unity API UnityEngine.VR.WSA - 其中有许多SpatialMapping和Surface相关的类,可以帮助开发者实现各种空间映射的需求。 SurfaceObserver - 它是空间映射底层API最重要的成员,提供了对设备对现实世界的理解的洞察力。SurfaceObserver描述世界中的一个立体对象,并报告哪些曲面已被添加,更新或删除。 然后应用程序可以异步地请求具有或不具有物理冲突数据的网格数据。 当请求被填满时,另一个回调通知应用程序数据已准备就绪。 SurfaceData - 另一个重要的组成部分是SurfaceData对象。 这包含构建和报告Surface的网格数据所需的所有信息。填充的SurfaceData在RequestMeshAsync调用中传递给系统。 当Mesh数据准备就绪时,在请求时提供的“data ready”回调中返回一个匹配的SurfaceData。 这允许应用程序精确地确定数据对应于哪个表面。 HoloToolkit API SpatialMappingManager - 管理应用程序与所有空间映射数据源(文件,观察者,网络)之间的交互。 SpatialUnderstanding - 控制理解模块中使用的扫描过程的状态和流程,提供了可视化扫描过程的手段。 注意事项
Spatial Sound(空间音效) Unity的音效系统本身就具备3D环境下处理空间音效的能力。 Unity设置 AudioSource组件设置 :3D Sound Settings包含所需大部分控制参数。 ![]() AudioManager - 点击Unity编辑器菜单栏Edit→Project Settings→Audio,打开AudioManager窗口。 ![]() 关键设置:系统采样率设为48000,采用Microsoft HRTF声场定位技术。 HoloToolkit API UAudioManager - 通过它,声音设计师可以设置播放行为的音频事件,并且通过单例API播放音频事件。 注意事项 空间音效在 MR/VR 沉浸式环境中非常重要。 World Coordinate(坐标系统) 所有3D图形应用程序都使用笛卡尔坐标系来推导出虚拟世界中物体的位置和方向。这样的坐标系建立了3个垂直轴,沿其定位物体:X,Y和Z轴。在混合现实中,您的应用程序将对虚拟和物理坐标系统都有所了解。Windows调用在物理世界中具有真实含义的坐标系统的空间坐标系。空间坐标系以米为单位表示其坐标值。这意味着在X,Y或Z轴分开放置2个单位的对象将在混合现实中呈现出彼此相距2米。这使您可以轻松地在现实世界范围内渲染对象和环境。 Unity API WorldAnchor - 锚点组件是虚拟世界与现实世界互动的一种方式。 锚点是一个特殊的组件,可以覆盖同一GameObject上的Transform组件的位置和方向。 对于具有Anchor组件的GameObjects,系统会根据系统的理解,将其锁定在现实世界中。而World Anchor(世界锚点)组件代表物理世界的精确点与世界锚点的父GameObject之间的联系。 一旦添加,具有World Anchor组件的GameObject将保持锁定到现实世界中的位置。 HoloToolkit API TapToPlace - 将此可扩展脚本添加到GameObject中非常简单,允许用户沿着空间映射网格点击并放置GameObject。TapToPlace还允许用户指定父GameObject与选定的GameObject一起移动。需要场景中的GazeManager,GestureManager和SpatialMappingManager。 WorldAnchorManager - 将世界锚点包装并简化一些繁琐的API内容。 注意事项
结语 今天详尽地为大家介绍了HoloLens设备的各项功能,以及如何从Unity中使用这些功能。点击[阅读原文]进入Unity官方中文社区(unitychina.cn),还可以查看更多Unity与HoloLens开发相关的学习资源。 |
Unite 2017 | 使用Unity开发HoloLens应用实战技巧(下)
最新推荐文章于 2023-03-14 14:42:56 发布