MRTK开发记录

MRTK开发记录
fastyMRTK 开发记录
MRTK是微软官方推出的针对MR(混合现实)开发的一套工具集。
同时官方提供了一个MRFT工具进行相关工具包的管理。
MRTK的体系架构:
MRFT
在选定一个Unity项目之后可以使用此工具导入相关的工具。
使用此工具其实是通过修改Unity的包管理器中的Json来管理
我们至少需要安装:
在Unity2021.x之后版本我们官方推荐使用OpenXR工具来管理。
😄当然我们可以选择性的使用。
Unity设置
Unity版本:2020.3.8f1
导入Unity项目中后,可以看到如下提示。
同时我们需要做如下设置:
切换平台到通用平台:
依据导入的选择设置XR相关设置:
我这里没有使用OPen XR 所以没有勾选支持。
可以导入相关的example来查看示例:
使用上下左右移动视角。鼠标右键按住旋转视角。
鼠标左键点击。
可以在这里打开相关的打包工具:
可以看到如下所示的打包工具:
默认是打包生成VS项目:
生成的项目是一个使用c++的Windows UWP项目。
在设置项目中可以设置要获取的权限。
PS: 😿打包的时候务必将画质调到最低,模拟器性能极差。
安装HoloLens2模拟器
使用 HoloLens 仿真器 - Mixed Reality | Microsoft Docs
在使用模拟器之前,还需要打开Hype-V
安装好之后,会在Vs中看到:
选择到此设备后启动项目:
弹出一个黑框:
等待模拟器启动.
按照公司的电脑i5-8400 32g 1060 的配置,在模拟器下运行MRTK的示例场景都是困难的,一打开CPU马上占用100%😢。
后续我自建了一个场景只放了一个Cube,将所有质量拉到低之后勉强可以运行,还好可以在Unity下流畅运行。
创建一个新场景
MR场景和我们通常的场景不同,需要特点的摄像机和移动方式。
MRTK已经为我们准备好了这些。
创建一个新场景,从选项卡选择 Add to…
发现左侧面板为我们增加了3个对象:
- ToolKit
- MR玩家空间-摄像机
- MR屏幕内容
此时运行场景:
可以看到鼠标变成一个小店,而且会有一个能量条类似的东西用于描述当前的程序性能。
MixedRealityToolkit
MRTK2 配置文件配置指南 - MRTK 2 | Microsoft Docs
在这里我们可以对MRTK进行配置,点击Copy可以复制一份配置文件。
通过修改这个来控制性能面板的开关:
UX组件
MRTK为我们提供了一组规范的UI组件,通过这些组件我们可以方便的构建出常用的UX。
边界控制
边界控制 - MRTK 2 | Microsoft Docs
边界控制在我实际使用时发现了很多坑💭
- 使用边界控制的物体依赖于
Box Collider- 在移动了使用边界组件的物体后,其边界框的绘制位置可能出错,需要手动调用UpdateBound更新。
- 需要关闭BoxCollider才能关闭绘制,设置Active有可能无法去除边界框。
按钮
有基于碰撞的按钮和基于UI的按钮
基于UI的按钮
创建一个Canvas,点击按钮转换为MR的Ui Canvas
++ 注意在使用UnityUi形式的button时,在HoloLens实机上需要按下手势,不太方便操作,考虑使用3D按钮 ++
随后可以不使用HoloLens的图集,直接修改Sprite为自己要使用的即可:
让UI支持直接点击
需要添加如下几个组件:
- 组件
注意框选的这两个部分:
- Moving Button Visual 用于进行检测按钮——这里使用自己即可
- 注意添加Event绑定刀Trigger中。
交互
添加此脚本为对象增加可交互性,并且可设置交互时的动画或效果变化。
设置不同行为的状态表现。
可操作对象
对于我们需要控制移动的对象为其添加脚本:
设定使用单手、双手控制对象移动
PS: 😄我们可以通过指定HostTransform 来设定以谁作为轴,默认以自身为轴,此时移动时是独立的。
- 以父对象为Host则移动此对象时,所有以此父对象为Host的对象都会移动
- 以外部对象为Host则移动此对象时,此对象将会绕着Host.
🎫可以添加约束管理器组件来约束行为表现。
ℹ️此组件同样依赖于
BoxCollider。
约束管理器
约束管理器 - MRTK 2 | Microsoft Docs
使用约束管理器,可以将一组约束组件应用于转换。 可以考虑使用附加到游戏对象的
TransformConstraint类型的组件。 默认情况下,约束管理器将自动收集附加到游戏对象的所有约束组件,并将其应用于已处理的转换。 但是,用户可以选择手动配置应用的约束列表,只允许应用附加约束的一个子集。
求解器
求解器概述 - MRTK 2 | Microsoft Docs
Orbital
Orbital用于保持对象与视线的相对位置。
Follow
Follow 用于让某对象跟随视线。
ToolTips
在MRTK中自制使用TextMeshPro当做提示文件会导致边界框组件渲染异常😢,网络上也没有任何相关的资料。所以想要在MR中对相关的游戏对象显示ToolTip可能只能使用官方的组件。
📖官方的ToolTips组件,相比TextMeshPro还有一个优点是可以始终面向摄像机或始终面向游戏对象。
添加此组件设定好使用的Prefab和要显示的提示内容,有需要可重新指定锚点。
皮肤
在MRTK中,使用ScripttableObject来配置使用的样式。
例如在边界框组件中在Visuals 下就可以配置不同的边界框显示样式。
在可交互对象中,也可以配置具体的动画交互表现:






































