mcpField
Q
quest-spatial

quest-spatial

github.com/ssheleg开发194 次安装6 天前更新
代码仓库

关于 quest-spatial

面向 Android 团队的 Meta Spatial SDK 开发指导,涵盖沉浸式 Quest 应用的工具链、ECS 与面板设计、运行时预算、混合应用及常见问题。

主要功能

  1. 01Android 与 Kotlin 开发指导
  2. 02工具链和依赖检查
  3. 03ECS 与面板架构
  4. 04运行时预算与性能说明
  5. 05混合 Activity 交互模式
  6. 06SDK 常见问题排查

适用场景

  1. 01选择 Quest 开发路线
  2. 02规划面板和场景负载
  3. 03构建 2D 与沉浸式混合应用
  4. 04审查 Spatial SDK 项目

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ssheleg/xr-dev --skill quest-spatial

安装后在 Claude Code 中输入/quest-spatial确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
budgets-and-traps.md
build-and-audit.md
docs-map.md
hybrid-activities.md
samples-map.md

详细介绍

Meta Spatial SDK:通往 Horizon OS 的 Android 路径

Spatial SDK 让 Android 团队能够使用 Kotlin 开发沉浸式应用:Android Studio、Gradle、Jetpack Compose,以及他们已经在使用的库——底层采用 OpenXR, 上层采用 ECS 数据模型。场景中的面板是真正的 Android 视图,而不是别人绘制 出来、看起来像 Android 视图的纹理。

如需规划整个产品的路线图或进行阶段审查,请使用 quest-lifecycle;单项技术任务仍由此技能负责。如果该技能不存在,请在此处指出当前阶段、相关证据和下一项前置要求。

混合使用面板和沉浸式 Activity 时,请阅读 references/hybrid-activities.md:其中介绍独占/协作模式、状态归属和转换测试。

步骤 0 — 这是否是正确的路径?

团队和应用路径
Android 开发者;面板、2D UI、媒体,或同时也是 2D 应用的应用Spatial SDK — 此技能
需要最大限度控制渲染器、自定义 Vulkan,或使用自有游戏引擎quest-native(C/C++ OpenXR)
现有 Unity 内容、Unity 团队、资源商店流水线Meta 的 hz-unity-* 技能
在 Web 上发布,或也必须能在头显之外运行quest-webxr
只需在 Quest 上运行的现有 2D Android 应用Meta 的 hz-android-2d-porting — 迁移,而非重建

Spatial SDK 围绕面板和 ECS 场景构建。请尽早使用下方的运行时估算 选择有代表性的工作负载,不要将其视为硬性 API 上限。实现或审查项目时, 请阅读 references/build-and-audit.md;如果没有 Meta 的配套技能,其中会提供内联流程。

步骤 1 — 检查实际工具链

2026-09-20 读取的样本快照(meta-quest/Meta-Spatial-SDK-Samples,MIT)。 请先阅读消费者端包装器/目录;未经 SDK 和构建兼容性检查,不要将现有项目 升级到这些版本:

组件版本
头显Horizon OS v69 或更新版本上的 Quest 2 / 3 / 3S / Pro
Android StudioNarwhal(2025.1.1)或更新版本 — AGP 8.11 的必需版本
Gradle9.4.1(包装器)
Android Gradle Plugin8.11.1
Kotlin2.1.0
JDK17(随 Android Studio 捆绑;仅命令行构建需要单独安装)
Meta Spatial Editor除 MrukSample 和 PremiumMediaSample 外,所有样本都需要
NDK仅自定义着色器需要(MediaPlayerSample、PremiumMediaSample)

Meta 明确指出的升级陷阱: AGP 8.5 或更早版本使用 Gradle 9.x 包装器时,会在原生/CMake 模型同步期间失败,因为该 AGP 调用的 Gradle API 已在 Gradle 9 中移除。将 AGP 升级到 8.11.1 即可解决问题——错误消息 并未指明这一点。

依赖项采用模块化设计;按应用实际用途选取: com.meta.spatial:meta-spatial-sdk(核心,始终需要)、-vr(沉浸式 功能,大多数应用需要)、-toolkit(常见组件和系统)、 -physics、-ovrmetrics,以及 documentation/spatial-sdk/spatial-sdk-packages 中列出的其他依赖项。

第 2 步 — 架构设计前,先看预算

Meta 发布了工作负载估算和建议 (spatial-sdk-runtime-guidelines,于 2026-09-21 重新核查)。在初步设计中使用这些数据,并保留其设备、内容和刷新率假设:

测量/建议项目快照估算
每个 tick 的实体操作数(系统中的一次读取或写入)2,000
物理对象500
视野中的 3D GLB 对象100(当它们覆盖 >50% 的视口时;覆盖面积更小时才可以更多)
场景图实体~1,000
面板分辨率开销每增加 480,000 像素 ≈ +1% GPU

面板表格描述的是独立测试工作负载,并按类型区分:

面板类型FPS 跌破 90FPS 持续低于 90
空视图2040
仅 UI 视图1540
图像视图1540
Web 视图530
视频视图35
基于 Activity 的视图22
带图层的面板515

这些测量并未确立“最多 3 个视频/2 个 Activity”的硬性限制,也不能保证混合工作负载可正常运行。在发布版本中测试实际的面板、媒体和对象组合;与其按项目数量扩展面板,不如考虑复用/虚拟化。

第 3 步 — 每个都能浪费一天的陷阱

完整说明和规避方法:references/budgets-and-traps.md。

  • 调试版本比发布版本慢得多 — Meta 将其列为已知问题,并非意外情况。请在发布版本中评估性能,否则这些数字毫无意义。
  • 进入沉浸式模式可能会关闭其他应用的音频。 除非确实需要独占音频,否则请请求 AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK,并处理 OnAudioFocusChangeListener。
  • 沉浸式 Activity 上调用 finish() 可能无法让 2D 面板重新显示,而且当面板使用 enableLayer = true 时,还可能在 libMetaSpatialSDK.so 内部崩溃。enableLayer 已弃用 — 请使用 layerConfig。
  • PanelRenderMode.Mesh() 仍会创建合成器图层;规避方法是转换设置后,将 panelConfig.layerConfig = null。
  • 共用一个 SceneSwapchain 的图层会忽略每层的 setClip() — 所有图层都会显示最后设置的剪辑。

第 4 步 — 阅读资料的位置

索引位于 documentation/spatial-sdk/llms.txt/,每个页面都有对应的 Markdown 副本,路径为 documentation/spatial-sdk/<slug>.md。前缀说明了页面回答的问题。以下数量对应注明日期的源快照,并非实时目录:

前缀数量内容
spatial-sdk-*97SDK 本身:-ecs、-component、-systems、-queries、-2dpanel-*(8)、-isdk-*(5,交互)、-ui-*(10,Horizon OS UI Set)、-mruk、-physics、-animations、-glxf、-gltfs、-custom-shaders、-hot-reload、-known-issues、-runtime-guidelines
spatial-editor-*20可视化编辑器、其 CLI、资源库、组合
ps-*43平台服务:权益、IAP、排行榜、成就、云备份、证明
ts-*24故障排查:adb、logcat、分析器、设备设置
os-*、po-*、platform-*5合成器、CPU/GPU 级别、内存、音频
hybrid-*、horizon-billing-*、add-spatial-sdk-to-app5混合应用和 Google Play 账单兼容性

值得保持打开的 slug 表:references/docs-map.md。

第 5 步 — 示例比文字说明更快给出答案

github.com/meta-quest/Meta-Spatial-SDK-Samples(MIT)。请枚举当前的示例目录,不要依赖文字说明中的数量。打开已经实现目标功能的示例 — references/samples-map.md 会将每个示例对应到它所回答的问题,并注明该仓库自带 AGENTS.md、.mcp.json 和针对各 Agent 的配置,因此可以直接将 Agent 指向克隆下来的仓库。

一段话了解混合应用

混合应用会在一个软件包中切换 2D 面板活动和沉浸式活动。面板活动运行于三种上下文中——主页、叠加层(Quest 按钮菜单)和沉浸式活动中的嵌入式上下文。两种交互模式:独占(一次运行一个;启动新活动后再终止旧活动)和协作(多个活动并发运行)。HybridSample 是参考实现。

此技能的后续指引

后续问题去哪里
编写 ECS 代码、面板、Gradle 配置如果有 Meta 的 hz-spatial-sdk,请使用它;否则使用此技能的构建/审计流程
应用能运行,但会掉帧quest-perf
将应用安装到头显、读取日志、进行捕获quest-tooling
发布应用quest-store

上文中的版本、预算和已知问题来自 samples repository 和 developers.meta.com,读取日期为 2026-09-20;两者内容会变动——引用具体数字前,请用 metavr docs search "spatial sdk runtime guidelines" 重新核实。

触发条件

其他会将请求路由至此的短语:"spatial panels" / "VR 面板"、"Meta Spatial SDK"、"Spatial Editor"、"hybrid app" / "混合应用"、"glXF"、"com.meta.spatial"、"how many panels can I open" / "最多能打开多少个面板"、"Spatial SDK samples" / "Spatial SDK 示例"。

从 0.4.4 中的描述移至此处:"Kotlin app for Quest"、"适用于 Quest 的 Kotlin 应用"。

评论

支持 Markdown