公司hololens2刚刚到手 ,开始研究MRTK,写些自己理解的笔记。刚刚开始看没几天 ,会持续更新一段时间。由于自己水平不高,理解也肯定会有很多偏差,期待路过的大佬可以给予指正。

 

环境搭建:

先贴两个链接:

https://blog.csdn.net/qq_35649669/article/details/101947533

https://blog.csdn.net/qq_41905133/article/details/88983431

这两个大佬的步骤和遇到问题的解决方案都很详细了。

说说我的情况,最新的win10sdk(10.0.18362.1),vs2019,unity2018.4.7,MRTK2.3.0工具包。先装Win10SDK并指定较短路径,是为了解决Unity打包报错的问题。再装vs2019,我觉得在这步还是要装一遍win10sdk用于vs打包,至于如果碰到找不到SKD和找不到地址的报错的话按上面第二个链接处理就可以。

Unity项目设置:

https://docs.microsoft.com/zh-cn/windows/mixed-reality/mrlearning-base-ch1

微软官方教程配试第一个Hololens2项目,说的很清楚并且有解释每一步操作的原因。

自定义空间扫描功能:

https://docs.microsoft.com/zh-cn/windows/mixed-reality/mrlearning-base-ch2

微软官方教程。大概说清了这个新的工具包的使用方法。想要自定义和修改一些功能大都要通过修改这个配置文件得以实现。

之后我就没有看微软的这个官方文档了,这个文档之后的内容就不是我想要的了,所以我转向了另一篇微软的文档。

https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/GettingStartedWithMRTKAndXRSDK.html

之后的内容都是从这篇文档里总结出来的了。

 

开启&隐藏诊断系统

引用头文件Microsoft.MixedReality.Toolkit;

CoreServices.DiagnosticsSystem.ShowDiagnostics = false;

如果你按照上述步骤完成了第一个hololens应用的话,就会在HoloLens中看到一个显示帧率的UI,这个就是诊断系统了,建议在开发过程中可以开着,以便了解项目中哪些地方是比较消耗性能需要优化的。上面这行代码就是隐藏诊断系统的。核心服务层(CoreServices)为全局脚本,所以这句话不需要写在特定的脚本以及挂载在特定的物体上,只需要确保会运行就可以实现功能了。

 

语音输入

方法一:

场景中找到MixedRealityToolkit物体->MixedRealityToolk脚本 clone配置文件。

input选项卡 clone配置文件。

Input Actions 选项卡 clone配置文件。在这里可以添加自定义事件,以便于映射到后续的输入。点击+add New action,向下滑动会看到action 16,修改名字为Ratote(这个名字随便取),Axis选为Digital,我把这个理解为bool。 

speech 选项卡 clone配置文件。在这里就可以添加关键词,并且与上一步定义的事件关连了。点击添加一个新的语音命令,Keyword填写旋转(添加想要识别的关键词),action选择上一步定义的Ratote(这里你有可能找不到刚刚定义的事件,我猜测大概是系统没有编译的原因,新建一个脚本让unity编译一下,或者重启Unity就好了)。

接下来要实现Ratote事件。创建一个Cube添加InputActionHandler脚本。InputActionHandler->Action选择Ratota。这时你就可以用Unity自带的事件系统绑定一个事件了。编写脚本如下,挂载与Cube上。在InputActionHandler->OnInputActionEnded点击“+”,填入cube,并选择事件为rotate函数。

Hololens2 个人开发笔记

如果你电脑有话筒的话就可以测试了。(如果没效果的话,先往下看一下方法二后的备注)

方法二:

编写如下脚本,并挂载与cube上。

Hololens2 个人开发笔记

这个方法是继承并实现IMixedRealitySpeechHandler接口。再将关键词“变色”添加再MixedRealityToolk->input->speech选项卡中就可以了。

备注:这两个方法有一个相同的条件,就是在Cube被注视时,才会在识别到关键词时触发相应事件。在编辑器中可使用“wasd”控制主摄像机移动,来测试是否注视cube。

 

视线追踪

开启视线追踪功能。MixedRealityToolkit物体->MixedRealityToolk->input->input data providers->windows mixed reality eye gaze provider->Type选为windows.mixedreality.toolkit.windowsmixedreality.input->WindowsMixedMealityEyeGazeDataProvider  碰到灰色不能选的clone配置文件就好了。

勾选MixedRealityToolkit物体->MixedRealityToolk->input->Input Simulation Service->Simulate eye position。这两步是在开启视线追踪,具体什么作用我也不太清楚。 

之后就可以在任意脚本中编写CoreServices.InputSystem.EyeGazeProvider.HitPosition,这句代码是获取视线看到物体上的坐标。

编辑如下脚本,并挂载与有碰撞体的物体上,这个脚本继承BaseEyeFocushandler后,并可重写函数OnEyeFocusStart,这个函数在开始注视本物体时调用。相关函数如下图二。

Hololens2 个人开发笔记Hololens2 个人开发笔记

这样就可以打包vs项目了,因为unity暂时不支持开启视线追踪功能,所以我们要在vs中开启。打开vs项目,右侧解决方案管理器点开“项目名+(Universal windows)”下拉选项,双击Package.appxmanifest。在左侧打开的视图中找到功能选项卡,勾选注视输入选项就可以了。(友情提示vs最大化窗口)

相关文章: