# MRTK 开发记录
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 中。
# 交互
可交互 - MRTK 2 | Microsoft Docs
添加此脚本为对象增加可交互性,并且可设置交互时的动画或效果变化。
设置不同行为的状态表现。
# 可操作对象
对于我们需要控制移动的对象为其添加脚本:
设定使用单手、双手控制对象移动
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 下就可以配置不同的边界框显示样式。
在可交互对象中,也可以配置具体的动画交互表现:
# 相关链接
- MRTK2-Unity 开发人员文档 - MRTK 2 | Microsoft Docs
- Microsoft.MixedReality.Toolkit Namespace | Microsoft Docs