最近在没有更新,项目上也没有新技术的进展,整理一下之前的内容。 Hololens在之前开发远程协助的时候用到了MRTK,今天简单介绍一下使用主要内容:
准备:
Unity 2019.1以上 电脑需要Windows 10 SDK 18362或更高版本 MRTK下载:https://github.com/Microsoft/MixedRealityToolkit-Unity/releases Vs 尽量选择2019
下载UnityPackage包,Foundation是基础包,必须下载,其他的可根据选择下载,一般初次使用Examples、Tools也下载下来导入。
新建工程,后切换到UWP平台,注意:XR Setting 下面VirtualRealitySupported 必须勾选,如果VirtualRealitySDKs添加没有WindowsMixedReality,需要到PackageManager里下载WindowsMixed Reality设置:
注意
如果在Unity 2019.3或更高版本中使用Unity的XR SDK,则应选择“ DefaultXRSDKConfigurationProfile”。如有需要,此配置文件由MRTK的XR SDK系统和提供程序设置。 如果要开始使用HoloLens或HoloLens 2,则应选择“ DefaultHoloLens1ConfigurationProfile”或“ DefaultHoloLens2ConfigurationProfile”。 有关DefaultMixedRealityToolkitConfigurationProfile和DefaultHoloLens2ConfigurationProfile之间的差异的更多信息,请参阅配置文件。
功能说明:
首先看摄像机上的两个脚本 MixedRealityInputModule.cs :处理指针事件,包括点击/按下/抬起 GazeProvider.cs :实现注视,以及光标的设置
注意:
上面两个脚本脚本不需要实现什么东西
交互系统:
手指按操作:
被操作的GameObject 上挂Collider,以及下面的脚本:
PressableButton.cs
设置和添加按钮移动或者手按下的交互事件,和下面的PhysicalPressEventRouter.cs捆绑使用
TouchBegin 注视
TouchEnd 离开
ButtonPressed 按下
ButtonReleased 抬起
PhysicalPressEventRouter.cs
设置手操作的事件(是按下还是抬起),将操作发送给Interactable.cs
Interactable.cs
处理手势或者注视交互的状态和事件
创建Theme
设置交互过程中状态的改变。
NearInteractionTouchable.cs :使关节运动的手可触摸任何对象
手指抓操作:
BoundingBox.cs:边框界限设置
Activation behavior: • Activate On Start: 一旦场景开始,边界框将变为可见 • Activate By Proximity: 当关节的手靠近对象时,边界框变为可见。 • Activate By Pointer: 当手射线指示器瞄准边界框时,该边界框将变为可见. • Activate Manually: 边界框不会自动显示。您可以通过访问boundingBox.Active属性通过脚本手动激活它。 Scale minimum 最小允许比例。不推荐使用此属性,最好添加MinMaxScaleConstraint脚本。如果添加了此脚本,将从中获取最小比例,而不是从边界框中获取。 Scale maximum 允许的最大比例。不推荐使用此属性,最好添加MinMaxScaleConstraint脚本。如果添加了此脚本,则最大缩放比例将取自此脚本,而不是边界框。 Box display 各种边界框可视化选项。 如果“Flatten Axis”设置为“Flatten Auto”,则脚本将不允许沿范围最小的轴进行操作。这将产生一个2D边界框,通常用于薄物体。 Handles 它将显示HoloLens 1st gen样式的句柄。要使用HoloLens 2样式的手柄,您需要分配适当的手柄预制件和材料。
手柄(HoloLens 2样式的设置)
• Handle Material:BoundingBoxHandleWhite.mat • Handle Grabbed Material:BoundingBoxHandleBlueGrabbed.mat • Scale Handle Prefab:MRTK_BoundingBox_ScaleHandle.prefab • Scale Handle Slate Prefab:MRTK_BoundingBox_ScaleHandle_Slate.prefab • Scale Handle Size:0.016(1.6cm) • Scale Handle Collider Collider Padding:0.016(使可抓取的Collider略大于手柄的视觉效果) • Rotation Handle Prefab:MRTK_BoundingBox_RotateHandle.prefab • Rotation Handle Size:0.016 • Rotation Handle Collider Padding:0.016(使可抓取的碰撞器略大于手柄视觉效果) 连接 • Proximity Effect Active: 启用基于接近度的手柄激活 • Handle Medium Proximity: 第一步缩放的距离 • Handle Close Proximity: 第二步缩放的距离 • Far Scale: 当手超出边界框交互范围时,手柄资产的默认比例值(上面由“手柄中等接近度”定义的距离。默认情况下使用0隐藏手柄) • Medium Scale: 当手在边界框交互作用范围内时,手柄资产的比例值(上面的距离由“手柄闭合接近度”定义。使用1表示正常尺寸) • Close Scale: 当手在抓斗交互作用范围内时,手柄资产的比例值(上面的距离由“手柄闭合接近度”定义。使用1.x可以显示更大的尺寸)
Events
Bounding box provides the following events. This example uses these events to play audio feedback. • Rotate Started: 旋转开始时触发. • Rotate Ended: 旋转结束时触发 • Scale Started: 缩放开始时触发。 • Scale Ended: 缩放结束时触发
ManipulationHandler.cs :拖动操作脚本 边界框可以与ManipulationHandler.cs远距离交互作用相结合,以使对象可移动。操纵处理程序支持一手和两手交互。手部跟踪可用于与近距离的对象进行交互。 要使对象响应近乎清晰的手势输入,请同时添加NearInteractionGrabbable脚本。 One Hand Rotation Mode Near指定当单手/控制器靠近时对象的行为. One Hand Rotation Mode Far 指定在远距离用一只手/控制器抓取对象时对象的行为 One Hand Rotation Mode Options: • Maintain original rotation: 移动物体时不旋转 • Maintain rotation to user: 保持对象对X / Y轴的原始旋转给用户 • Gravity aligned maintain rotation to user: 保持对象向用户的原始旋转,但使对象保持垂直。对于边界框很有用 • Face user: 确保对象始终面对用户。适用于板岩/面板 • Face away from user: 确保对象始终背对用户。对于向后配置的板岩/面板很有用 • Rotate about object center: 仅适用于铰接的手/控制器。使用手/控制器旋转物体,但绕物体中心点旋转。对于远距离检查很有用. • Rotate about grab point: 仅适用于铰接的手/控制器。旋转物体,就好像用手或控制器握住它一样。对检查很有用
Two Handed Manipulation Type
• Scale: 仅允许缩放 • Rotate: 仅允许旋转. • Move Scale: 允许移动和缩放. • Move Rotate: 允许移动和旋转 • Rotate Scale: 允许旋转和缩放 • Move Rotate Scale: 允许移动,旋转和缩放比例 Event • OnManipulationStarted:操作开始时触发。 • OnManipulationEnded:操作结束时触发。 • OnHoverStarted:当手/控制器将可操纵的鼠标悬停在附近或远处时触发。 • OnHoverEnded:当手/控制器将鼠标悬停在附近或远处时触发。
后续更新更详细的内容。