双重渲染融合组件
本节详细介绍了所有用于双重渲染融合的新组件。
双渲染融合设置指南中的“应用项目验证器修复”步骤为场景添加了附加组件。
您可以使用附加工具手动创建这些游戏对象,这些工具可以通过右键点击场景层级并选择 XR > 双重渲染融合 来找到。或者通过菜单栏中的 GameObject > XR > Dual Render Fusion 进行访问。
动态 OpenXR 加载器组件
动态Open XR 加载器组件允许应用程序在连接眼镜后加载 Open XR,类似于耳机的工作方式。此组件与 Spaces Glass Status 组件配合使用,后者用于检测支持的眼镜是否存在,并在配置允许的情况下启动 Open XR。
该组件提供了多个回调函数,用于在 OpenXR 开始连接时控制用户界面的行为,这些回调函数通过 Fusion Lifecycle Events 组件对开发人员开放。
动态 OpenXR 加载器属性
显示器连接时自动启动 XR:启用此选项后,当连接任何支持的眼镜时,应用程序会自动启动 OpenXR。如果禁用此选项,开发人员需要在需要 XR 时手动调用 Dynamic OpenXR Loader 组件的 StartOpenXR 方法。
开发人员可以通过调用以下方法手动启动和停止 OpenXR:
StartOpenXR 只有在连接了支持的眼镜时才能成功,请参见 Spaces Glass Status 组建。
自动管理 XR 相机:启用此选项后,当 OpenXR 启动或停止时,将根据需要自动启用或禁用包含 AR Session 和 AR Session Origin 的游戏对象。
Spaces Glass Status 组件
Spaces Glass Status 组件用于获取应用程序运行设备的信息,并获取与眼镜连接状态相关的信息。
该组件通过 Fusion Lifecycle Events 组件向开发人员提供回调功能。
开发人员还可以通过代码在运行时查询以下数据:
Spaces Glass Status 可用数据
眼镜连接状态:
获取眼镜的连接状态。
● 眼镜的连接状态可以是“断开连接”或“已连接”
眼镜活跃状态:
获取眼镜的活跃状态
● 眼镜的活跃状态可以是“活跃”或“闲置”。
● 如果眼镜处于“断开连接”状态,则不能是“活跃”状态。
● “闲置”表示眼镜没有被佩戴,可能是由于接近传感器超时等原因,这可以作为提示,通过降低渲染质量或减少高强度代码部分的工作量来节省电力。
设备类型:
获取眼镜的设备类型。
● 设备类型分为几个大类,这些类别可以帮助应用程序决定如何在特定类别的设备上最佳展示内容。
● 设备类型包括“无”、“一体机”、“有线”或“无线”
○ “无”表示眼镜的连接状态当前为“断开连接”。
○ “一体机”指的是一体化眼镜类型(如 MR 或 VR 头显)。
○ “有线”指通过电缆连接到智能手机的 AR 眼镜。
○ “无线”指通过无线方式连接到智能手机的 AR 眼镜。
Spaces Host View 组件
Spaces Host View 组件在应用程序运行于不支持 Dual Render Fusion 的 MR/VR 设备时,动态禁用智能手机的显示。
该组件还提供开发人员可用的回调函数,用于根据需要启用或禁用其他功能,例如为 MR/VR 设备启用替代 UI,这些回调通过 Fusion Lifecycle Events 组件向开发人员提供。
该组件包括用于渲染到智能手机显示的相机。
Fusion Lifecycle Events 组件
Fusion Lifecycle Events 组件收集所有与 Dynamic OpenXR Loader、Spaces Glass Status 和 Spaces Host View 组件相关的事件。
Fusion Lifecycle Events 属性
当启用“在场景加载时重新广播”选项时,Fusion Lifecycle Events 组件可以在切换场景时重新广播“On OpenXR Available”、“On OpenXR Unavailable”、“On OpenXR Started”和“On OpenXR Stopped”事件,这使得在场景加载完成后,可以根据当前连接设备的能力进行适当的配置。
当 OpenXR 可用
● 当 Dynamic OpenXR Loader 组件启用时,或者在尝试启动 OpenXR 之前和停止 OpenXR 之后,这个事件会被广播。
● 当眼镜连接并完全检测到时,会广播这个事件。这表示 OpenXR 可以被初始化,但 OpenXR 尚未处于活动状态。
● 该事件在眼镜与兼容的运行时环境连接并被检测到时触发,但需要注意的是,应用程序在访问 OpenXR 功能之前,OpenXR 仍需初始化。
● 眼镜的连接状态可以随时通过 SpacesGlassStatus.Instance.GlassConnectionState 查询。
当 OpenXR 不可用
● 当 Dynamic OpenXR Loader 组件启用时,或者在尝试启动 OpenXR 之前和停止 OpenXR 之后,这个事件会被广播。
● 当眼镜断开连接时,会广播这个事件。这表示 OpenXR 无法被初始化,也未处于活动状态。
● 未检测到 OpenXR 路径,说明眼镜已断开连接,需要重新连接才能启用 OpenXR 功能。
● 眼镜的连接状态可以随时通过 SpacesGlassStatus.Instance.GlassConnectionState 查询。
OpenXR 启动时
● 在 OpenXR 初始化之后、OpenXR 子系统启动之前,会广播这个事件。
● 此时应明确哪些 OpenXR 功能已启用并正确初始化,但子系统尚未运行。
OpenXR 启动后
● 在 OpenXR 子系统启动后,会广播这个事件。
● 此时,所有 XR 内容都应可用。
● 开发者应订阅这个事件,以便在场景中启动可选的 XR 内容。
● 在这个事件广播后,可以安全地使用 OpenXR 功能,直到广播停止事件。
OpenXR 停止时
● 在 OpenXR 子系统停止并在 OpenXR 加载器反初始化之前,会广播这个事件。
● 开发者应订阅这个事件,以便在安全的情况下关闭需要 OpenXR 的内容。
● 当这个事件被调用时,开发者必须立即停止使用任何 OpenXR 功能。
OpenXR 停止后
● 在 OpenXR 子系统停止后,OpenXR 加载器反初始化完成时,会广播这个事件。
● 当接收到这个事件时,OpenXR 未加载。
● 功能可以被查询以查看是否计划使用,但实际上不可用。
OpenXR 子系统未运行
● 在这个事件之后,会立即广播可用性,指示 OpenXR 是否可以重新启动(眼镜是否连接)。
空闲状态
● 当眼镜处于空闲状态时(例如,眼镜被放下且未佩戴时),会广播此事件(例如,由于接近传感器超时触发)。
● 这可以作为降低渲染质量或减少仅 XR 内容更新优先级以节省电量的提示。
● 眼镜的活动/空闲状态可以随时通过 SpacesGlassStatus.Instance.GlassActiveState 查询。
活动状态
当眼镜处于活动状态时(例如,正在佩戴并显示内容),会广播此事件。
如果眼镜断开连接,则无法处于活动状态。
眼镜的活动/空闲状态可以随时通过 SpacesGlassStatus.Instance.GlassActiveState 查询。
主视图启用
● 使用支持双渲染融合的设备时,会触发“主视图启用”事件,此时,应用程序可以选择适当显示或隐藏元素。例如,在 AR 设备上启用双渲染融合主视图。
● 这并不表示是否有支持的 AR 设备连接到主设备。
主视图禁用
● 使用不支持双渲染融合的设备时,会触发“主视图禁用”事件。此时,应用程序可以选择适当显示或隐藏元素。例如,在 MR/VR 设备上启用替代的用户界面元素。
● 这表示没有有效的主设备(智能手机),且 SpacesGlassStatus.Instance.DeviceType 可能是 Aio。
融合模拟器组件
为了启用双渲染融合编辑器模拟,必须将融合模拟器组件添加到场景中。该组件与 Spaces 主视图一起,处理摄像机逻辑,以便在 Unity 编辑器的显示屏 1 和 2 上正确显示双渲染融合应用程序。
要使该组件正常工作,必须在双渲染融合 OpenXR 功能设置中启用 SimulateFusionDevice 选项,更多信息请参阅配置双渲染融合设置。
Fusion 屏幕设置
Fusion屏幕设置组件包含强制智能手机屏幕方向为纵向或横向的逻辑。
这是一个可选组件。
它展示了如何在 Unity 运行时正确设置智能手机屏幕方向,例如调用 Screen.orientation = ScreenOrientation.Portrait;。调用 Screen.orientation 设置时必须确保启用了双渲染融合功能,否则可能会改变 MR/VR 头戴设备屏幕的方向,导致显示异常。
样本中的组件
某些组件仅包含在示例中。
伴侣控制器
一些开发者希望将现有的 Snapdragon Spaces 项目迁移到使用双渲染融合,以利用伴侣控制器的陀螺仪 3DOF 指向功能。请按照以下步骤将其添加到项目中。
要在 Unity 中复制伴侣控制器,需要几个资源和一些脚本。
1、导入样本。
2、如果需要,在提示时导入 TextMeshPro。
3、从 Assets > Samples > Snapdragon Spaces > [Snapdragon Spaces 版本] > Fusion Samples > Prefabs 中,将 CanvasControllerCompanion 预制件从导入的样本拖到层级视图中。
4、由于预制件中不包含 XR 摄像机,可能需要将两个游戏对象连接到 XR 摄像机。如果未设置,XR Origin 或 AR Session Origin 会在运行时自动检测并使用附加的摄像机。或者,也可以在 ControllerPositionHeadMirror 的 Ar Camera 字段中手动设置它们。
在 GyroRotationReceiver 的 Ar Camera 字段中进行设置。
5、确保 Active Input Handling 设置为 Both ,以启用陀螺仪控制:
这一步应该由双渲染融合设置指南中的“应用项目验证器修复”步骤正确处理。
6、从 Assets/Samples/Snapdragon Spaces/[Snapdragon Spaces 版本]/Fusion Samples/Controller/Input Actions 中,添加 ControllerPrefabInputActions 作为 Input Action Manager 的附加操作资产。
如果层级视图中没有 Input Action Manager,请先创建一个空的 GameObject 并添加该组件。
7、要使用菜单按钮功能,可以使用标准的 Unity 输入系统,并在层级视图中菜单按钮的 Button 对象上添加一个 On Click() 事件。
8、要在设置菜单中添加更多选项,可以暂时启用 Settings Overlay 游戏对象,并在滚动框列表中添加菜单项。(目前,About 按钮没有功能,仅作为示例。)