Unity3D基于Hololens开发(MRTK使用)

最近在没有更新,项目上也没有新技术的进展,整理一下之前的内容。
Hololens在之前开发远程协助的时候用到了MRTK,今天简单介绍一下使用主要内容:

准备:

Unity 2019.1以上
电脑需要Windows 10 SDK 18362或更高版本
MRTK下载:https://github.com/Microsoft/MixedRealityToolkit-Unity/releases
Vs 尽量选择2019
Unity3D基于Hololens开发(MRTK使用)

下载UnityPackage包,Foundation是基础包,必须下载,其他的可根据选择下载,一般初次使用Examples、Tools也下载下来导入。

新建工程,后切换到UWP平台,注意:XR Setting 下面VirtualRealitySupported 必须勾选,如果VirtualRealitySDKs添加没有WindowsMixedReality,需要到PackageManager里下载WindowsMixed Reality设置:
Unity3D基于Hololens开发(MRTK使用)

注意

如果在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
处理手势或者注视交互的状态和事件
Unity3D基于Hololens开发(MRTK使用)
创建Theme
Unity3D基于Hololens开发(MRTK使用)
设置交互过程中状态的改变。
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样式的手柄,您需要分配适当的手柄预制件和材料。
Unity3D基于Hololens开发(MRTK使用)

手柄(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: 允许移动,旋转和缩放比例
Unity3D基于Hololens开发(MRTK使用)
Event
• OnManipulationStarted:操作开始时触发。
• OnManipulationEnded:操作结束时触发。
• OnHoverStarted:当手/控制器将可操纵的鼠标悬停在附近或远处时触发。
• OnHoverEnded:当手/控制器将鼠标悬停在附近或远处时触发。



后续更新更详细的内容。

猜你喜欢

转载自blog.51cto.com/myselfdream/2551530