开发
开发
选择平台

沉浸式调试工具

更新时间: 2025年12月16日

概览

Unity 沉浸式调试工具是一款旨在让您通过头戴设备进行监控、可视化、疑难解答和应用程序游戏迭代的工具。其包括:
  • 供头戴设备调试使用的用户界面窗口
    窗口包含一个 控制栏、一个 控制台窗口 和一个 检查器窗口,提供针对您应用程序的特定调试选项。
  • 一款让您能够定制头戴设备内调试体验的可选 Unity 编辑器框架
    通过脚本属性 [DebugMember] 或检查器组件 DebugInspector,可以定制调试工具。
Overview of Immersive Debugger in-headset UI panel
您可以通过沉浸式调试工具,执行以下操作,而无需摘下头戴设备:
  • 在控制台日志窗口中查看 Unity 日志
  • [从 v74 SDK 起可用] 在检查器窗口中查看场景层次结构和应用程序中选定的游戏对象的详细信息
  • 在检查器窗口中查看指定的应用变量
  • 在检查器窗口中修改指定的浮点/整数/布尔型/枚举变量
  • 在头戴设备内的检查器窗口中调用指定函数的任何操作
  • 使用 Gizmo 绘图在 3D 空间中呈现指定的应用程序数据
这些工具能让您的开发过程更高效,使您能够:
  • 在头戴设备内快速迭代空间和视觉元素
  • 对基于场景等功能的混合现实体验进行调试
  • 通过控制台日志监控状态变化(尤其是临时事件),及时发现问题

快速入门

前提条件

在继续本教程之前,请完成设置 Unity 以用于 XR 开发中概述的设置步骤,以创建包含必要依赖项的项目。

在 Unity 编辑器中启用工具

从菜单栏中选择 Meta > 工具 > 沉浸式调试工具
项目设置窗口打开,显示沉浸式调试工具选项卡。选择启用
Entry point of Meta XR Tools menuSettings page for Immersive Debugger

从 Unity 编辑器添加调试选项

注意:在添加 [DebugMember] 属性时启用沉浸式调试工具,这样该工具可以对调试成员进行增量缓存以便在编译时进行追踪。
您可以在头戴设备内的检查器窗口中添加自己的调试选项,对沉浸式调试工具体验进行定制。
您可以通过以下任一方式或者同时使用两种方式来添加您感兴趣的编程元素:
  • 脚本属性
    [DebugMember] 属性添加到您的任何属性、字段或操作函数中,并通过该属性的参数对它们进行自定义。
    注意:若 IDE 未自动执行此操作,则您需要为 Meta.XR.ImmersiveDebugger.Interface 添加程序集依赖。
  • DebugInspector 组件添加至任何游戏对象,然后配置调试选项。
DebugInspector component that's used to add debug options without code
More detailed configuration option in the DebugInspector for each member
注意:使用 DebugInspector 添加的一些属性可能在头戴设备内窗口中无法正确显示,这是因为在 Unity 运行时剥离了它认为未使用的属性/功能。为了避免这种情况,请使用 [DebugMember] 脚本属性来访问它们,这样可保证保留成员。

在头戴设备中使用沉浸式调试工具

此工具可与 Link 配合使用,也可以部署在头戴设备的 APK 编译版本中。在 APK 编译版本中,通过 OVROverlay 合成器层来提高文本的清晰度。
Development Build is not required when using v77 or later
从 v77 版本开始,沉浸式调试工具再无需在头戴设备中使用开发编译版本。如需强制限制沉浸式调试工具仅显示在开发编译版本中,请前往“沉浸式调试工具设置 > 高级 > 集成 > 仅在调试编译版本中启用”。
(对于 v77 之前的版本)在部署编译版本到头戴设备之前,前往文件 > 编译版本配置文件。选择 Android,然后启用开发编译版本
注意:若要将该工具用于生产编译版本,请参阅高级用例
Development build is by default required for enabling the tool in headset

功能详细介绍

本节对沉浸式调试工具的元素进行更详细的介绍。

头戴设备内窗口

头戴设备内的用户界面由 控制栏控制台窗口检查器窗口 组成。

控制滑块

沉浸式调试工具启用后,控制栏会自动出现在游戏世界中(前提是项目设置中启用了启动时显示),您也可以在按下所选的切换显示输入按钮时看到控制栏。
In-headset Control Bar panel UI of Immersive Debugger
您运行该应用的时长在窗口的左上角显示。
从左到右,底部的图标可以帮助您:
  • 让窗口变得透明/不透明
  • 锚定窗口到固定位置,或者让其随头戴设备而移动
  • 启用或禁用窗口随偏转角旋转功能
  • 更改窗口距离
右侧的按钮用于切换检查器窗口和控制台窗口。

控制台窗口

在此窗口,您可以查看所有来自 Unity 的控制台日志,并使您可以在严重性、清除日志以及折叠或展开重复日志之间进行切换。
In-headset Console panel UI of Immersive Debugger
点击日志中的特定条目后,会显示全栈跟踪窗口,然后在右上角关闭它。
In-headset Console panel UI with log stacktrace opened of Immersive Debugger

检查器窗口

通过该窗口,您可以:
  • 查看场景层次结构并检查游戏对象
  • 监测变量的运行时值
  • 通过点击按钮来调用函数
  • 选择眼睛图标显示/隐藏功能模块
  • 调整变量的运行时值
左上角的图标可用于选择自定义检查器模式或层次结构视图模式。
当选择层次结构视图模式时,您可以从应用程序加载所有场景,并点击其中的游戏对象来检查单一行为组件及其成员。默认情况下仅显示公开成员,您可以在 ImmersiveDebugger 设置中更改此设置,方法是打开高级 > 层次结构视图 > 检查非公开成员
In-headset Inspector panel - Hierarchy View UI of Immersive Debugger
当选择自定义检查器模式时,左侧边栏显示调试项目的类别。项目的类别可在 DebugMember 属性或检查器窗口中进行指定。某些预配置的 Meta XR 调试项目也可立即使用,您可以在设置中将其关闭。请参阅 Meta 功能预构建调试,了解更多信息。
In-headset Inspector panel - Custom Inspectors UI of Immersive Debugger

调试功能

以下为各种调试功能以及各自的支持状态:
功能支持状态
观看
支持一切支持 ToString() 的内容。矢量有特殊的用户界面来展示单独的字段。另外,呈现的预览支持 Texture 数据类型
操作
只支持无参函数。
功能模块
支持可在 GizmoTypesRegistry 类中检查的多种 DebugGizmoTypes 类型。所有功能模块(除了轴)均可在 [DebugMember] 中通过额外的 Color 参数来使用该颜色进行绘制。
调整
支持使用滑块用户界面通过 [DebugMember(Tweakable = true, Min = xxx, Max = xx)] 调整浮点数/整数。支持使用用户界面开关调整布尔值,也支持使用下拉用户界面调整枚举。

脚本属性示例

启用沉浸式调试工具后,我们的框架会在编译时自动收集带有注释的符号,并在运行时将它们传送到头戴式设备窗口中。为了在查找这些符号过程中不过分影响运行时性能,我们借助位于 Assets/Resource/ImmersiveDebuggerSettings.asset 的一个可脚本化对象,对项目中的调试成员类进行预烘焙。
using Meta.XR.ImmersiveDebugger;
public class ExampleClass : MonoBehaviour
{
 // gizmo drawing, specifying a category
 [DebugMember(GizmoType = DebugGizmoType.Axis, Category = "MyDebugCategory")]
 private Pose _gameObjectPos;

 [DebugMember(GizmoType = DebugGizmoType.Line, Color = DebugColor.Red)]
 private Tuple<Vector3,Vector3> _direction;

 // just watch, note Tweakable is by default true for all supported types
 [DebugMember(Tweakable = false)]
 private bool _gameState;

 // tweak the value within a range
 [DebugMember(Min = 0.0, Max = 1.0)]
 private float _param;

 // action / call function, static members are also supproted
 [DebugMember]
 private void SpawnObject() {/* some code here */}
 private void Update()
 {
  // Update and consume all the debug options, e.g.:
  _gameObjectPos = new Pose(transform.position, transform.rotation);
 }
}

Meta 功能预先构建调试

为了让沉浸式调试器和 Meta XR SDK 易于使用,我们为一些 SDK 功能预先构建了一些调试功能。这包括:
  • 相机系统
  • 透视
  • 场景调试器(混合现实工具箱/MRUK)
这些内置调试选项默认提供在 Meta 所提供的类别下以供您使用,您可以前往“沉浸式调试器设置”> 检查数据集将其关闭。

高级用例

本节详细说明了更具体的用例。

将沉浸式调试工具用于生产版本

注意:v77 以后的版本中无需此设置)在项目设置中将 IMMERSIVE_DEBUGGER_ALLOW_USE_IN_PROD 添加为脚本编写预处理器定义,以便在生产版本而非开发版本中使用该工具。这样该工具就可以在非开发版中使用了。

使用您自己的相机,代替 OVRCameraRig

我们提供了一个自定义集成配置,该配置公开了沉浸式调试工具的相机的覆盖设置。如要提供脚本,覆盖 CustomIntegrationConfigBase(请查看 ExampleCustomIntegrationConfig),然后在启用使用自定义集成配置后,在设置部分填写 Mono 脚本。如要查找此设置,请在项目设置页面中点击 Meta XR > 沉浸式调试工具 > 高级 > 集成 > 使用自定义集成配置
Immersive Debugger Editor settings allows custom integration

在运行时为组件添加检查器

(从 v83 开始可用)RuntimeAPIs 类提供了运行时方法,可用于向沉浸式调试工具添加组件检查器窗口。这样,您就可以在运行时调试组件,而无需使用 DebugMember 属性。这对于调试动态创建的组件或为您无法访问源代码的组件添加检查器非常有用。

向沉浸式调试工具添加自定义窗口

(从 v83 开始可用)您可以通过实施 IPanelRegistrar 接口向沉浸式调试工具添加自定义窗口。您可以使用该接口创建自定义窗口,这些窗口会在运行时通过沉浸式调试工具注册。

已知问题

问题说明
OVRManager 依赖项 (OVROverlay)
沉浸式调试工具利用 OVROverlay 合成器图层来增加文本清晰度,但您的项目需要使用 OVRManager
对 HDR(相机和设备图形设置中)尚不支持
沉浸式调试工具窗口在使用 HDR 期间可能会出现某些视觉故障。