环境

win 10
vs 2022 community
unity 2020.3.25f1c1
MRTK 2.7.3

(Unity2019.4+MRTK2.6 或者 Unity2020.3+MRTK2.7是最佳搭配,不建议混合搭配)

下载地址

VS:https://visualstudio.microsoft.com/zh-hans/vs/
unity:https://unity3d.com/get-unity/download/archive
MRTK:https://github.com/Microsoft/MixedRealityToolkit-Unity/releases
.NET 5:https://dotnet.microsoft.com/download/dotnet/5.0
MRTF:https://www.microsoft.com/en-us/download/details.aspx?id=102778

搭建

参考:HoloLens2之路-Unity2020.3+MRTK2.7配置
官方文档:
选择 Unity 版本和 XR 插件;建议安装 Unity 2020.3 LTS 以及用于混合现实开发的 最新混合现实 OpenXR 插件
设置 XR 配置;混合现实 OpenXR 插件完全支持 AR Foundation 4.0,提供 ARPlaneManager 和 ARRaycastManager 实现。 这样,你可以编写一次代码,该代码适用HoloLens 2 ARCore/ARKit 手机和平板电脑。
欢迎使用混合现实功能工具;(MRFT)

编辑器操作

按键 功能
WSADQE 控制视角的前后左右上下
鼠标右键 控制视角
鼠标右键+滚轮 视角的左右旋转
左shift键、空格键,同时按下鼠标左键 显示左、右手,点击抓握
空格/左Shift+滚轮 左/右手的前后移动
T/Y键 永久显示左/右手 再次按下取消
Ctrl+Shift移动鼠标 旋转手部关节

打包

  • 用vs打开.sln文件,选择release, ARM64,远程计算机(属性页-调试 填写HoloLens ip地址),调试(F5)

  • usb调试,用vs打开.sln文件,选择release, ARM64,连接USB线,调试(F5)

  • MRTK打包APPX,Unity–Mixed Reality Toolkit–Utilities–Build Window–Appx Build openions,选择Release、ARM64、solution\auto increment–build appx。打开浏览器打开Hololens的IP地址,选择apps–install app–app package–选择文件打开文件夹,选择xxxxxx.appx / appxbundle文件,将APPX安装到真机上。

ip地址查看方式:设置/网络和Internet/WLAN/适配器属性/IPv4地址(设备为联网状态)
PIN码查看方式:设置/更新和安全/面向开发人员/配对(先开启使用开发人员功能与设备发现)

二、配置文件

HoloLens2之路-配置文件(一)
HoloLens2之路-配置文件(二)
HoloLens2之路-配置文件(三)
HoloLens2之路-配置文件(四)

配置文件本质是可编程对象,用于存储全局数据,配置文件需要预先定义,应用程序启动时会根据配置文件定义的功能注册相关服务、准备相应资源。

  • MRTK提供了若干默认配置文件(均位于Assets/MRTK/SDK/Profiles文件夹中 ),这些默认配置文件是针对通用场景设计,并没有针对特定应用优化。
  • 为确保默认的配置文件有效,MRTK锁定了默认配置文件的修改,新建配置文件通常是在Inspector窗口中点击某配置文件后的Clone按钮创建,新建配置文件后就可以进行针对性的配置,主配置文件与子配置文件遵循同样的规则。

2.1 Camera Profile

定义了渲染相机参数,相机系统配置文件由主配置文件管理,在主配置文件面板中,选择左侧列表框中的“Camera”,选择对应的配置

相机系统配置
Near Clip(近平面) 近裁减平面定义了虚拟元素渲染的最近距离,单位是米,为更好的用户体验,建议该参数设置在0.1左右
Far Clip(远平面) 远裁减平面定义了虚拟元素被渲染的最远距离,单位是米,超过最远距离的虚拟元素将不再被渲染,建议该值设置在50左右以提高深度缓冲区的精度
Clear Flags(清除标志) 定义帧刷新的背景填充方式,HoloLens应用设置为Color
Background Color(背景颜色) 定义帧刷新的背景色,HoloLens应用设置为黑色(Black)
Quality Setting(质量设置) 质量设置用于设定图像渲染质量,为提高性能,HoloLens应用建议设置为“Very Low”

2.2 Input Profile

输入数据提供者 控制器
输入模拟服务(Input Simulation Service) Simulated Hand
鼠标设备管理器(Mouse Device Manager) Mouse
OpenVR设备管理器(OpenVR Device Manager) Generic OpenVR, Vive Wand, Vive Knuckles, Oculus Touch, Oculus Remote, Windows Mixed Reality OpenVR
Unity操纵杆管理器(Unity Joystick Manager) Generic Joystick
Unity触控设备管理器(Unity Touch Device Manager) Unity Touch Controller
Windows听写输入提供者(Windows Dictation Input Provider)
WMR设备管理器(Windows Mixed Reality Device Manager) WMR Articulated Hand, WMR Controller, WMR GGV Hand
Windows语音输入提供者(Windows Speech Input Provider)

2.2.1 Pointer configuration

在MR应用运行过程中,当新控制器被检测到时,其对应的指针自动创建,指针可以通过输入配置文件下的指针配置文件进行配置,在HoloLens2设备应用开发时,默认使用MixedRealityPointerProfile配置文件

指针配置
Gaze cursor prefab(默认凝视光标) 默认凝视光标预制体
Pointing Extent(射线距离) 确定包括凝视在内的所有指针射线最远距离,单位米
Pointing Raycast Layer Masks(碰撞掩码) 确定指针可以交互的对象
Pointer Mediator(指针协调器) 协调多个指针,确保在同一时间只有一个指针处于激活状态
Debug Draw Pointing Rays(调试射线) 一个调试辅助程序,用于显示指针投射的射线
Debug Draw Pointing Rays Colors(调试射线颜色) 调试时射线显示的颜色

2.2.2 Input actions settings

设计输入动作的目的就是将处理逻辑与数据源解耦,从而更灵活、更方便扩展和维护。
在MRTK中创建输入动作,需要指定动作名称和输入数据类型(Axis Constraint,轴约束)

数据类型名 描述
None(无) 无具体类型
Raw(原始数据) 来自输入的原始数据 (仅用于代理)
Digital(开关值 0/1) 开关输入,如游戏手柄或鼠标按键
SingleAxis(单轴)SingleAxis(单轴) 单轴模拟输入,如游戏手柄中的模拟触发器
DualAxis(双轴) 双轴模拟输入,如摇杆
ThreeDofPosition(3DOF位移) 只具有平移的3自由度控制器产生的姿态
ThreeDofRotation(3DOF旋转) 只具有旋转的3自由度控制器产生的姿态
SixDof(6DOF)SixDof(6DOF) 具有平移和旋转6个自由度控制器产生的的3D姿态

输入动作规则是将某一个特定输入动作依据其值映射为几个输入动作的规则,利用制定的规则可以将一个输入动作转换成几个不同的输入动作,如可以根据双轴的输入动作“TURN”输入值将其分解成四个输入动作。

2.2.3 (Controller mapping configuration)

控制器映射配置: 输入动作创建好之后还需要将其映射到特定控制器,控制器映射配置里列出了所有MRTK支持的控制器,选择所需要的控制器,将动作绑定到控制器对应的输入。(保证数据类型一致)
实现将输入动作与实际的底层(任意)硬件控制器建立关联。

支持以下控制器
鼠标(Mouse,包括3D空间的鼠标)
触摸屏(Touch Screen)
Xbox控制器(Xbox controllers)
WMR控制器(Windows Mixed Reality controllers)
HoloLens手势(HoloLens Gestures)
HTC Vive控制器(HTC Vive wand controllers)
Oculus触摸控制器(Oculus Touch controllers)
Oculus物理控制器(Oculus Remote controller)
通用OpenVR设备(Generic OpenVR devices,仅对高级用户)

2.2.4Gestures configuration

手势配置:手势操作由设备HPU检测识别和处理。

手势 释义
none
select
hold
navigation
manipulation

MRTK会将这些识别结果映射到默认的输入动作上。

Speech commands

语音命令对预定义文字语音识别功能,利用语音命令控制对象行为。
Start Behavior(启动行为):

- Auto Start:关键词识别器(Keyword Recognizer)会在应用启动时自动启动
- Manual Start:通过脚本的方式启动关键词识别器

Recognition Confidence Level(识别可信级别)

- High
- Medium
- Low
- Rejected

定义语音命令关键词,然后将其关联到某一个输入动作上

三、Spatial Awareness Profile

空间感知系统配置:提供了对场景几何网格重建的相关属性

属性
Startup Behaviour 启动方式
Update Interval 更新周期
Physics Settings 物理仿真表现
Level of Detail Settings 网络LOD
Display Settings 外观表现

可以配置空间感知功能启动方式(Startup Behaviour)、更新周期(Update Interval)、物理仿真表现(Physics Settings)、网络LOD(Level of Detail Settings)、外观表现(Display Settings)等

四、Diagnostics Profile

属性
Show Diagnostics 诊断工具显示状态
Window Anchor 显示位置
Frame Sample Rate 帧采样率

五、Extensions Profile

允许开发者自己创建服务,扩展服务必须在配置文件中配置才能在应用程序运行时被MRTK管理使用。

MRTK采用: 服务定位器模式(Service Locator Pattern) 管理定位服务, 服务定位器模式结合工厂模式(Factory pattern)和/或依赖注入模式(Dependency Injection pattern)创建服务的实例

扩展服务与MRTK提供的系统服务一样,也能够接收处理所有Unity事件消息,无继承Monobehaviour类或者使用单例模式所带来的性能消耗, 并且允许无场景对象的C#脚本在前台或者后台执行(如生成系统、应用逻辑等)。在扩展服务配置文件里可以注册和配置自定义服务。

六、Editor Profile

辅助开发者检查对应功能是否开启、是否起作用。

服务检视器 选择Unity Hierarchy窗口中的对象时将显示其所使用的服务,提供该服务相关文档链接、编辑器可视化控制、服务状态的详细信息。
渲染深度缓冲区 在HoloLens2设备中共享使用深度缓冲区可以提高全息图像的稳定性,在开启渲染深度缓冲区功能后,将在当前场景的主相机视角下渲染深度缓冲区中的深度值,方便开发人员了解深度缓冲区是否功能正常

七、 Boundary Profile 边界配置文件

八、Teleport Profile 传送配置文件

九、Scene System Profile 场景管理配置文件

十、

配置文件定义了应用程序所有功能特性及部分技术细节,决定了应用的类型和外观表现,精细正确的配置文件设定可以在满足应用需求的同时更加有效的利用硬件资源,提高应用性能。
如果需要在运行时根据硬件设备能力动态的替换配置文件以启用/禁用某些功能,我们可以在MRTK初始化之前完成相应配置文件的替换,如下代码清单所示,需要注意的是,替换配置文件的脚本必须拥有更高的执行优先级,这样才能保证在MRTK初始之前完成替换。

//方法一
using Microsoft.MixedReality.Toolkit;
using UnityEditor;
using UnityEngine;
public class ProfileSwapper : MonoBehaviour
{void Start(){// 加载配置文件,MixedRealityToolkitConfigurationProfile可以换成任何需要替换的配置文件var profile = AssetDatabase.LoadAssetAtPath<MixedRealityToolkitConfigurationProfile>("Assets/MixedRealityToolkit.Generated/CustomProfiles/RuntimeSwapProfile.asset");MixedRealityToolkit.Instance.ActiveProfile = profile;}
}

在MRTK完成初始化之后通过替换配置文件以改变某些特性的行为方式,这需要依据具体配置文件及其配置管理的功能决定,有些配置文件可以在运行时动态切换,而有些配置文件则不能进行动态切换,应当先充分了解希望切换的配置文件详细信息。
在MRTK2.7及以后,MRTK提供了一个新方法SetProfileBeforeInitialization(),利用该方法可以确保在MRTK初始化之前替换原配置文件,当然,与前文一样,前提是这个脚本有更高的优先执行权,代码如下所示。


```csharp
//方法二
using Microsoft.MixedReality.Toolkit;
using UnityEngine;
public class PreInitProfileSwapper : MonoBehaviour
{[SerializeField]private MixedRealityToolkitConfigurationProfile profileToUse = null;private void Awake(){//profileToUse为需要替换运行的配置文件MixedRealityToolkit.SetProfileBeforeInitialization(profileToUse);}
}

除了使用上面的动态切换配置文件的方法,MRTK2.7还引入了热切换,可以在运行时动态切换配置文件。

//方法三
using Microsoft.MixedReality.Toolkit;
using UnityEngine;
public class PreInitProfileSwapper : MonoBehaviour
{[SerializeField]private MixedRealityToolkitConfigurationProfile profileToUse = null;private void swapperProfile(){//profileToUse为需要替换运行的配置文件MixedRealityToolkit.Instance.ActiveProfile = profileToUse;}
}

使用热切换时,当前配置文件卸载发现在当前服务的最后一个LateUpdate() 方法执行完之后,新的配置文件加载发生在当前服务的所有Update() 方法执行之前。由于是热切换,MR应用在这个过程中会受到影响,会出现卡顿甚至假死,但UI元素会保持不变,另外,拥有更高优先级的脚本可能在这个切换过程中访问配置文件,如果此是新的配置文件尚未设置完成会导致异常发生。

常见的很多配置文件都可以在开发时完成配置,但在实际开发中,也可能需要在运行时根据运行条件动态的修改某些配置项的参数,由于MRTK配置文件簇良好的树型结构,我们可以非常容易获取到所需要的子配置文件或者某个配置项,典型的示例代码如下。

//需要引入Microsoft.MixedReality.Toolkit命名空间
void GetProfile()
{var mainProfile = MixedRealityToolkit.Instance.ActiveProfile;var inputProfile = mainProfile.InputSystemProfile;var pointerProfile = inputProfile.PointerProfile;//获取配置属性参数float pointingExtent = pointerProfile.PointingExtent;//设置配置属性参数inputProfile.HandTrackingProfile.HandMeshVisualizationModes = Microsoft.MixedReality.Toolkit.Utilities.SupportedApplicationModes.Player;
}

通过MixedRealityToolkit.Instance.ActiveProfile属性我们可以获取到当前MR应用主配置文件,这是个单例实例,在MR应用运行时只有一份实例,然后就可以根据配置文件的树型结构获取到希望获取的子配置文件或者配置属性。需要注意的是,一些配置文件参数不可以在运行时修改,而另一些则可以,这与具体的配置文件相关。

针对HoloLens2设备,MRTK提供了默认的DefaultHoloLens2ConfigurationProfile配置文件及其所属子配置文件簇,该配置文件簇确保了所用配置通用可靠,在进行项目配置时,建议以该配置文件簇为基础进行针对性的优化,更快速和安全。

配置文件

Hololens环境搭建相关推荐

  1. Hololens2开发入门(一)环境搭建

    Hololens开发环境配置主要分为两块 一.unity环境搭建 本贴以2021.3.16f1c1版本为例,需要勾选 1.安卓板块 2.ios板块 3.universal windows platfo ...

  2. Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建

    Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建 一.Anaconda 创建 python3.7环境 1.进入 C:\Users\用户名 目录下,找到 ...

  3. Windows10+Anaconda3+Pycharm环境搭建

    Windows10+Anaconda3+Pycharm环境搭建 一.安装Anaconda3 1.进入 anconda官网,下载Anaconda3 2.安装,选项默认继续安装(可以自行更改安装位置),等 ...

  4. SpringCloud Alibaba微服务实战(一) - 基础环境搭建

    说在前面 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来 ...

  5. 2021年大数据环境搭建(二):分布式环境搭建

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 分布式环境搭建 集群规 ...

  6. 2021年大数据Spark(八):环境搭建集群模式 Standalone HA

    环境搭建-Standalone HA 高可用HA Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,存在着Master单 ...

  7. 2021年大数据Spark(六):环境搭建集群模式 Standalone

    目录 环境搭建-Standalone 前言 Standalone 架构 ​​​​​​​集群规划 修改配置并分发 修改slaves ​​​​​​​分发到其他机器 修改spark-env.sh 集群启动和 ...

  8. CentOS7环境搭建使用PhpStorm上传代码

    一.虚拟机介绍 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统. 虚拟系统通过生成现有操作系统的全新虚拟镜像,它具有真实win ...

  9. window10 系统上 ecplise 环境搭建

    ecplise 安装需要用到  JDK 环境的搭建以及ecplise 的下载 这两部完成即可 一: JDK环境搭建 到官网上下载JDK并且安装即可(下载的时候注意选择Accept License Ag ...

最新文章

  1. HDU - 2767 Proving Equivalences tanjar强连通-DAG性质
  2. 制作一个大风车加载条
  3. gulp-cli命令安装出错_一个牛逼的数据库操作命令行工具:mycli
  4. Java 算法 素数分解
  5. zynq7020安装linux图形界面,ZYNQ开发板的NFS文件系统安装 - ZYNQ7020学习
  6. C#自定义规则对比两个集合的对象是否相等
  7. 管理新语:主管不要当传声筒,要检查、核实
  8. 时间序列预测算法总结
  9. 3dmax推荐用哪个版本,主流好用的版本有哪些?
  10. SAP中通过删除新建未记账成本要素期间的方式更改成本要素类别
  11. oracle odi 资料档案库访问期间出现未分类的异常错误,ODI11g问题汇总
  12. “丧心病狂” kite
  13. Java app接入微信和支付宝支付
  14. iOS - 选取相册中iCloud云上图片和视频的处理
  15. 固定资产管理系统能给行政和IT人员带来什么?
  16. android摇一摇功能实现
  17. C语言 收入与纳税计算
  18. Spring框架学习路线
  19. 【opencv小案例-对象提取】阈值分割+形态学处理+面积横纵比过滤
  20. <机器学习>支持向量机(SVM)理论

热门文章

  1. 消防设施操作员考试真题、模拟练习题库(7)
  2. Civil 3d-快速转换C3D图形为CAD图形
  3. AutoCAD Civil 3D中的对象和标签
  4. python求直角三角形个数的公式_Python3 欧拉计划 问题71-75
  5. STM32H7 DMA阅读笔记
  6. 解决阿里云端口不通 配置安全组无效
  7. CentOS 安装Oracle 11g R2
  8. CSS的压缩 方法与解压
  9. 二级路由dhcp关闭连不上wifi_如何解决家里Wifi能连接,但上不去网怎么办?
  10. 讯飞aiui的webapi+python使用记录