# MRTK 开发记录

MRTK 是微软官方推出的针对 MR ( 混合现实 ) 开发的一套工具集。

同时官方提供了一个 MRFT 工具进行相关工具包的管理。

image-20220812095331431

MRTK 的体系架构:

image-20220815105452428

# MRFT

在选定一个 Unity 项目之后可以使用此工具导入相关的工具。

image-20220812095525069

使用此工具其实是通过修改 Unity 的包管理器中的 Json 来管理

我们至少需要安装:

image-20220812104205094

在 Unity2021.x 之后版本我们官方推荐使用 OpenXR 工具来管理。

😄当然我们可以选择性的使用。

image-20220812104327280

# Unity 设置

Unity版本:2020.3.8f1

导入 Unity 项目中后,可以看到如下提示。

image-20220812103958699

image-20220812165915460

同时我们需要做如下设置:

切换平台到通用平台:

image-20220812104526170

依据导入的选择设置 XR 相关设置:

image-20220812104933901

我这里没有使用 OPen XR 所以没有勾选支持。

可以导入相关的 example 来查看示例:

image-20220812111136533

使用上下左右移动视角。鼠标右键按住旋转视角。

鼠标左键点击。

可以在这里打开相关的打包工具:

image-20220812110738654

可以看到如下所示的打包工具:

image-20220812110816035

默认是打包生成 VS 项目:

生成的项目是一个使用 c++ 的 Windows UWP 项目。

image-20220812110949329

在设置项目中可以设置要获取的权限。

image-20220812113114132

PS: 😿打包的时候务必将画质调到最低,模拟器性能极差。

# 安装 HoloLens2 模拟器

使用 HoloLens 仿真器 - Mixed Reality | Microsoft Docs

在使用模拟器之前,还需要打开 Hype-V

安装好之后,会在 Vs 中看到:image-20220812111306982

选择到此设备后启动项目:

弹出一个黑框:

image-20220812111414847

等待模拟器启动.

image-20220812113600735

按照公司的电脑 i5-8400 32g 1060 的配置,在模拟器下运行 MRTK 的示例场景都是困难的,一打开 CPU 马上占用 100%😢。

后续我自建了一个场景只放了一个 Cube,将所有质量拉到低之后勉强可以运行,还好可以在 Unity 下流畅运行。

# 创建一个新场景

MR 场景和我们通常的场景不同,需要特点的摄像机和移动方式。

MRTK 已经为我们准备好了这些。

创建一个新场景,从选项卡选择 Add to…

发现左侧面板为我们增加了 3 个对象:

  • ToolKit
  • MR 玩家空间 - 摄像机
  • MR 屏幕内容

image-20220815100722745

此时运行场景:

可以看到鼠标变成一个小店,而且会有一个能量条类似的东西用于描述当前的程序性能。

# MixedRealityToolkit

MRTK2 配置文件配置指南 - MRTK 2 | Microsoft Docs

image-20220815101123490

在这里我们可以对 MRTK 进行配置,点击 Copy 可以复制一份配置文件。

通过修改这个来控制性能面板的开关:

image-20220815103841608

# UX 组件

MRTK 为我们提供了一组规范的 UI 组件,通过这些组件我们可以方便的构建出常用的 UX。

# 边界控制

边界控制 - MRTK 2 | Microsoft Docs

Bounds control

边界控制在我实际使用时发现了很多坑💭

  1. 使用边界控制的物体依赖于 Box Collider
  2. 在移动了使用边界组件的物体后,其边界框的绘制位置可能出错,需要手动调用 UpdateBound 更新。
  3. 需要关闭 BoxCollider 才能关闭绘制,设置 Active 有可能无法去除边界框。

# 按钮

有基于碰撞的按钮和基于 UI 的按钮

image-20220815140928969

基于物理碰撞的按钮

# 基于 UI 的按钮

创建一个 Canvas,点击按钮转换为 MR 的 Ui Canvas

image-20220815141142436

++ 注意在使用 UnityUi 形式的 button 时,在 HoloLens 实机上需要按下手势,不太方便操作,考虑使用 3D 按钮 ++

image-20230129152013229

随后可以不使用 HoloLens 的图集,直接修改 Sprite 为自己要使用的即可:

image-20230129152126667

# 让 UI 支持直接点击

需要添加如下几个组件:

image-20230130180717373

  • 组件

image-20230130180802422

注意框选的这两个部分:

  • Moving Button Visual 用于进行检测按钮 —— 这里使用自己即可
  • 注意添加 Event 绑定刀 Trigger 中。

image-20230130180853141

# 交互

可交互 - MRTK 2 | Microsoft Docs

添加此脚本为对象增加可交互性,并且可设置交互时的动画或效果变化。

image-20220815143319004

设置不同行为的状态表现。

image-20220815143435847

# 可操作对象

对于我们需要控制移动的对象为其添加脚本:

设定使用单手、双手控制对象移动

image-20220815155426005

PS: 😄我们可以通过指定 HostTransform 来设定以谁作为轴,默认以自身为轴,此时移动时是独立的。

  1. 以父对象为 Host 则移动此对象时,所有以此父对象为 Host 的对象都会移动
  2. 以外部对象为 Host 则移动此对象时,此对象将会绕着 Host.

🎫可以添加约束管理器组件来约束行为表现。

ℹ️此组件同样依赖于 BoxCollider

# 约束管理器

约束管理器 - MRTK 2 | Microsoft Docs

使用约束管理器,可以将一组约束组件应用于转换。 可以考虑使用附加到游戏对象的 TransformConstraint 类型的组件。 默认情况下,约束管理器将自动收集附加到游戏对象的所有约束组件,并将其应用于已处理的转换。 但是,用户可以选择手动配置应用的约束列表,只允许应用附加约束的一个子集。

image-20220815161016632

# 求解器

求解器概述 - MRTK 2 | Microsoft Docs

# Orbital

Orbital 用于保持对象与视线的相对位置。

# Follow

Follow 用于让某对象跟随视线。

# ToolTips

在 MRTK 中自制使用 TextMeshPro 当做提示文件会导致边界框组件渲染异常😢,网络上也没有任何相关的资料。所以想要在 MR 中对相关的游戏对象显示 ToolTip 可能只能使用官方的组件。

📖官方的 ToolTips 组件,相比 TextMeshPro 还有一个优点是可以始终面向摄像机或始终面向游戏对象。

image-20220823141857540

添加此组件设定好使用的 Prefab 和要显示的提示内容,有需要可重新指定锚点。

image-20220823142055145

# 皮肤

在 MRTK 中,使用 ScripttableObject 来配置使用的样式。

例如在边界框组件中在 Visuals 下就可以配置不同的边界框显示样式。

image-20220823101336950

在可交互对象中,也可以配置具体的动画交互表现:

image-20220823101508110

# 相关链接

  • MRTK2-Unity 开发人员文档 - MRTK 2 | Microsoft Docs
  • Microsoft.MixedReality.Toolkit Namespace | Microsoft Docs
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Fasty 微信支付

微信支付

Fasty 支付宝

支付宝

Fasty 贝宝

贝宝