本文主要是介绍Hololens环境搭建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
环境
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环境搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!