MRTK2 配置文件配置指南
混合现实工具包尽可能地集中了管理工具包所需的多项配置(除了真正的运行时“内容”)。
本指南是针对工具包当前可用的所有配置文件屏幕的简单演练。
混合现实工具包的主配置文件
主配置文件(附加到场景中的 MixedRealityToolkit GameObject)提供项目中工具包的主入口点。
注意
混合现实工具包“锁定”默认配置屏幕,以确保项目始终有一个共同起点,建议随着项目的发展开始定义自己的设置。 在播放模式下,MRTK 配置不可编辑。
混合现实工具包的所有“默认”配置文件可在 Assets/MRTK/SDK/Profiles 文件夹中的 SDK 项目中找到。
重要
DefaultHoloLens2ConfigurationProfile 已针对 HoloLens 2 进行了优化。 有关详细信息,请参阅配置文件。
在打开混合现实工具包的主配置文件时,可在检查器中看到以下屏幕:
如果选择 MixedRealityToolkitConfigurationProfile 资产,但场景中没有 MixedRealityToolkit,系统将询问你是否希望 MRTK 自动设置场景。 这是可选的,但是,场景中必须有一个活动的 MixedRealityToolkit 对象才能访问所有配置屏幕。
其中包含项目的当前活动运行时配置。
可在此处导航到 MRTK 的所有配置文件,包括:
- 混合现实工具包的主配置文件
- 体验设置
- 相机设置
- 输入系统设置
- 边界可视化设置
- 传送系统选择
- 空间感知设置
- 诊断设置
- 场景系统设置
- 其他服务设置
- 输入操作设置
- 输入操作规则
- 指针配置
- 手势配置
- 语音命令
- 控制器映射配置
- 控制器可视化设置
- 编辑器实用程序
- 在运行时更改配置文件
- 另请参阅
以下相关部分详细介绍了这些配置文件:
体验设置
此设置位于混合现实工具包的主配置页上,用于定义项目的混合现实环境规模的默认操作。
相机设置
相机设置定义如何为混合现实项目设置相机,可定义常规剪裁、质量和透明度设置。
输入系统设置
混合现实项目提供一个功能强大且经过训练的输入系统,用于路由默认选择的项目的所有输入事件。
MRTK 提供的输入系统后面是多个其他系统,这些系统有助于推动和管理抽象出多平台/混合现实框架的复杂性所需的复杂交织性。
下面详细介绍了每个配置文件:
边界可视化设置
边界系统可转换由基础平台边界/保护者系统报告的感知边界。 通过边界可视化工具配置,可以根据用户的位置自动显示场景中记录的边界。边界还会根据用户在场景中传送的位置做出反应/更新。
传送系统选择
混合现实项目提供一个功能完备的传送系统,用于管理默认选择的项目中的传送事件。
空间感知设置
混合现实项目提供一个重建的空间感知系统,以在默认选择的项目中与空间扫描系统配合使用。
使用混合现实工具包空间感知配置,可以定制系统的启动方式,无论系统是在应用程序启动时自动启动还是稍后以编程方式启动,还可以设置视野范围。
它还使你能够配置网格和图面设置,进一步自定义项目理解你周围环境的方式。
这仅适用于可提供扫描环境的设备。
诊断设置
MRTK 的一个可选但非常有用的功能是插件诊断功能。
诊断配置文件提供了几个简单的系统以在项目运行时进行监视,包括用于在场景中启用/禁用显示面板的便捷 On/Off 开关。
场景系统设置
MRTK 提供这个可选的服务,帮助你管理复杂的附加场景加载/卸载。 若要确定场景系统是否适合你的项目,请阅读场景系统入门指南。
其他服务设置
混合现实工具包的更高级的领域之一是其服务定位器模式实现,可使用该实现向框架注册任何“服务”。 这样可轻松地为框架扩展新功能/系统,而且项目还可以利用这些功能来注册自己的运行时组件。
任何注册的服务仍能充分利用所有 Unity 事件,而实现 MonoBehaviour 或笨拙单一实例模式不会产生任何开销和成本。 这使得纯 C# 组件在运行前台和后台进程(例如生成系统、运行时游戏逻辑或几乎任何其他操作)时没有任何场景开销。
输入操作设置
输入操作提供一种从运行时项目提取任何物理交互和输入的方法。 所有物理输入(来自控制器/手/鼠标等)都转换为逻辑输入操作,以在运行时项目中使用。 这可确保无论输入来自何处,项目只需在场景中将这些操作实现为“要执行的操作”或“与之交互”。
若要创建新的输入操作,只需单击“添加新操作”按钮并为其表示的内容输入一个易记名称。 然后,只需选择操作要传达的轴(数据类型),或在有物理控制器的情况下,选择可以附加到的物理输入类型,例如:
轴约束 | 数据类型 | 描述 | 示例用法 |
---|---|---|---|
无 | 无数据 | 用于空操作或事件 | 事件触发器 |
原始(保留) | object | 预留供以后使用 | 空值 |
Digital | 布尔 | 布尔 on 或 off 类型数据 | 控制器按钮 |
单轴 | FLOAT | 单精度数据值 | 范围输入,例如触发器 |
双轴 | Vector2 | 多轴的双浮点类型日期 | Dpad 或控制杆 |
3 Dof 位置 | Vector3 | 具有 3 个浮动轴的位置类型数据 | 仅 3D 位置样式的控制器 |
3 Dof 旋转 | 四元数 | 具有 4 个浮动轴的仅旋转输入 | 三度样式控制器,例如 Oculus Go 控制器 |
六自由度 | 混合现实姿势(Vector3、四元数) | 使用 Vector3 和四元数组件的位置和旋转样式输入 | 运动控制器或指针 |
利用输入操作的事件并不限于物理控制器,仍可在项目中使用,以使运行时效果生成新的操作。
注意
输入操作是少数几个无法在运行时编辑的组件之一,它们只是一种设计时配置。 由于框架(和项目)依赖于为每个操作生成的 ID,因此不应在项目运行时换出此配置文件。
输入操作规则
输入操作规则提供一种方法,根据输入操作的数据值将该输入操作引发的事件自动转换为其他操作。 这些都是在框架内无缝管理的,不会产生任何性能开销。
例如,将单个双轴输入事件从 DPad 转换为 4 个相应的“Dpad 向上”/“DPad 向下”/“Dpad 向左”/“Dpad 向右”操作(如下图所示)。
也可以在自己的代码中完成此操作。 不过,由于这是一种非常常见的模式,因此框架提供了一种机制使其“现成可用”
可以为任何可用输入轴配置输入操作规则。 但是,某个轴类型的输入操作可能会转换为同一轴类型的另一种输入操作。 可以将双轴操作映射到另一个双轴操作,但不能映射到数字操作或空操作。
指针配置
指针用于驱动来自任何输入设备的场景中的交互性,同时为场景中的任何对象(它们已附加碰撞器,或为 UI 组件)提供方向和命中测试。 默认情况下,自动为控制器、头戴显示设备(凝视/聚焦)和鼠标/触控输入配置指针。
还可以使用混合现实工具包提供的任一线组件在活动场景中可视化指针,或在实现了 MRTK IMixedRealityPointer 接口的情况下使用你自己的线组件。
- 指向范围:确定所有指针的全局指向范围,包括凝视。
- 指向光线投射层掩码:确定指针将光线投射到哪些层。
- 调试绘图指向射线:可视化用于光线投射的光线的调试帮助程序。
- 调试绘图指向射线颜色:用于可视化的一组颜色。
- 凝视光标预制件:可轻松地为任何场景指定全局凝视光标。
还有一个帮助程序按钮,可在需要时使用该按钮快速跳转到凝视提供程序以重写某些特定值。
手势配置
手势是一种系统特定的实现,可用于将输入操作分配给各种 SDK(例如 HoloLens)提供的各种“手势”输入方法。
注意
目前的手势实现仅适用于 HoloLens,将在未来添加到工具包时针对其他系统进行增强(日期未定)。
语音命令
与手势相似,某些运行时平台还提供智能的“语音转文本”功能,用于生成 Unity 项目可接收的命令。 此配置文件允许配置以下内容:
- 常规设置 -“启动行为”设置为“自动启动”还是“手动启动”取决于是否在输入系统启动时初始化 KeywordRecognizer,或让项目决定何时初始化 KeywordRecognizer。 “识别置信度级别”用于初始化 Unity 的 KeywordRecognizer API
- 语音命令 - 注册“单词”并将其转换为项目可接收的输入操作。 如果需要,它们还可附加到键盘操作。
重要
在 Windows 10 平台(例如 HoloLens 和 Windows 10 桌面版)上运行时,该系统当前仅支持语音,将在未来添加到 MRTK 时,针对其他系统进行增强(日期未定)。
控制器映射配置
混合现实工具包的核心配置屏幕之一可以配置和映射项目可使用的各种类型的控制器。
使用下面的配置屏幕,可以配置该工具包当前识别的任一控制器。
MRTK 为以下控制器/系统提供默认配置:
- 鼠标(包括 3D 空间鼠标支持)
- 触摸屏
- Xbox 控制器
- Windows Mixed Reality 控制器
- HoloLens 手势
- HTC Vive Wand 控制器
- Oculus Touch 控制器
- Oculus Remote 控制器
- 通用 OpenVR 设备(仅限高级用户)
单击任一预生成的控制器系统的映像,可为其所有相应输入配置单个输入操作,例如,请查看下面的 Oculus Touch 控制器配置屏幕:
还提供一个高级屏幕,用于配置上面未标识的其他 OpenVR 或 Unity 输入控制器。
控制器可视化设置
除了控制器映射外,还提供一个单独的配置文件用于自定义控制器在场景中的呈现方式。
这可以在“全局”(特定手的控制器的所有实例)配置,也可特定于单个控制器类型/手进行配置。
MRTK 还支持 Windows Mixed Reality 和 OpenVR 的本机 SDK 控制器模型。 这些控制器作为 GameObject 加载到场景中,使用平台的控制器跟踪对它们进行定位。
如果场景中的控制器表示形式需要偏离物理控制器位置,则只需针对控制器模型的预制件设置该偏移量(例如,为控制器预制件的转换位置设置一个偏移位置)。
编辑器实用程序
以下实用程序仅适用于编辑器,有助于提高开发效率。
服务检查器
服务检查器是一项仅适用于编辑器的功能,可生成代表活动服务的场景内对象。 选择这些对象将显示检查器,这些检查器提供文档链接、对编辑器可视化的控制并显示服务状态。
可以在配置文件中的“编辑器设置”下选中“使用服务检查器”来启用服务检查器。
深度缓冲区渲染器
与一些混合现实平台共享深度缓冲区可以提高全息影像的稳定性。 例如,Windows Mixed Reality 平台可以按像素修改渲染的场景,以考虑到渲染帧时的细微头部移动。 不过,这些技术需要具有准确数据的深度缓冲区来了解几何图形的位置及其与用户的距离。
若要确保场景将所有必要数据渲染到深度缓冲区,开发人员可以在配置文件中的“编辑器设置”下切换“渲染深度缓冲区”功能。 这将采用当前深度缓冲区,并通过对主相机应用后期处理效果 DepthBufferRenderer
,将其渲染为场景视图的颜色。
场景中的蓝色圆柱体具有关闭 ZWrite 的材料,因此不会写入深度数据
在运行时更改配置文件
可以在运行时更新配置文件,在这种情况下,通常有两种不同的方案和时间非常有用:
- 在 MRTK 初始化之前切换配置文件:启动时,在初始化 MRTK 并激活配置文件之前,替换尚未使用的配置文件,根据设备功能启用/禁用不同的功能。 例如,如果体验是在没有空间映射硬件的 VR 中运行,那么启用空间映射组件可能没有意义。
- 切换处于活动状态的配置文件:启动后,在初始化 MRTK 并激活配置文件后,切换当前正在使用的配置文件以更改某些功能的行为方式。 例如,应用程序中可能有一个特定的子体验,该体验需要完全删除离手部远的指针。
在 MRTK 初始化之前切换配置文件
此切换的实现方式是附加一个 MonoBehaviour(示例如下),使其在 MRTK 初始化之前运行(即 Awake())。 请注意,脚本(即对 SetProfileBeforeInitialization
的调用)必须在 MixedRealityToolkit
脚本之前执行,这可通过设置脚本执行顺序设置来实现。
using Microsoft.MixedReality.Toolkit;
using UnityEngine;
/// <summary>
/// Sample MonoBehaviour that will run before the MixedRealityToolkit object, and change
/// the profile, so that when MRTK initializes it uses the profile specified below
/// rather than the one that is saved in its scene.
/// </summary>
/// <remarks>
/// Note that this script must have a higher priority in the script execution order compared
/// to that of MixedRealityToolkit.cs. See https://docs.unity3d.com/Manual/class-MonoManager.html
/// for more information on script execution order.
/// </remarks>
public class PreInitProfileSwapper : MonoBehaviour
{
[SerializeField]
private MixedRealityToolkitConfigurationProfile profileToUse = null;
private void Awake()
{
// Here you could choose any arbitrary MixedRealityToolkitConfigurationProfile (for example, you could
// add some platform checking code here to determine which profile to load).
MixedRealityToolkit.SetProfileBeforeInitialization(profileToUse);
}
}
除了“profileToUse”,还可以将一些任意配置文件集应用于特定平台(例如,一个用于 HoloLens 1,一个用于 VR,一个用于 HoloLens 2 等等)。 可以使用各种其他指标(例如 https://docs.unity3d.com/ScriptReference/SystemInfo.html,或相机是设置为不透明还是透明)以确定要加载的配置文件。
切换处于活动状态的配置文件
可将 MixedRealityToolkit.Instance.ActiveProfile
属性设置为替换活动状态的配置文件的新配置文件来实现此操作。
MixedRealityToolkit.Instance.ActiveProfile = profileToUse;
请注意,在运行时设置 ActiveProfile
时,当前正在运行的服务将在所有服务的最后一个 LateUpdate() 之后销毁,并且与新配置文件关联的服务将在所有服务的第一个 Update() 之前进行实例化和初始化。
在此过程中,可能会出现明显的应用程序延迟。 此外,优先级高于 MixedRealityToolkit
脚本的任何脚本都可以在正确设置新的配置文件之前进行其更新。 有关脚本优先级的详细信息,请参阅脚本执行顺序设置 。
在配置文件切换过程中,现有的 UI 相机会保持不变,以确保需要画布的 Unity UI 组件在切换后仍可正常工作。