嘿 r/Unity3D

我刚刚发布了一个开源项目,帮助 Unity 6 VR 在 Arch Linux 下与 Meta Quest 3 组合使用 ALVR + SteamVR,工作时支持 Unity 编辑程序模式和 APK 独立构建。

问题:Unity 的 OpenXR 插件打包了一个 Android x86_64 二进制文件(libUnityOpenXR.so),该文件编译使用了 Android 的 bionic libc。在 glibc 环境的桌面 Linux 下,它会导致崩溃。没有官方支持。

解决方案:我建立了一个.native兼容性 shim 和 API 层,用以桥接两者:

  • bionic-to-glibc shim(转发 LIBC -版本的符号)
  • 一个 OpenXR API 层,去掉了 Unity 尝试使用的 Android 特定扩展
  • 一个 Vulkan 隐式层,强制启用 VK_KHR_timeline_semaphore
  • 一个假 JVM/JNI 接口stub 使用 LD_PRELOAD,避免 Android 二进制文件的 JNI 调用崩溃
  • 修复 OpenXR 负载路径和一份启动脚本,它将所有组件连接起来

结果:在 Unity 编辑器中,按下 “Play” 并在 Quest 3 头显中显示场景。控制器、头跟踪、渲染都成功。

https://preview.redd.it/zbkgll0fu2qg1.png?width=1638&format=png&auto=webp&s=f94b5d73c300e837db3c37a13f8fbf514ba24ea2

仓库:github.com/Stridemann/Unity-XR-on-Linux-for-Meta-Quest

完整披露:这花费了好几个小时的反复 native 崩溃调试工作,使用 Cursor IDE + Claude AI 作为我的合作者,逆向工程 Android 二进制的依赖,找出它所需的 bionic 符号,并建立四个独立的 native shim。我没有使用 AI 职助,我也不会在一次工作中完成此项工作。Even,仓库还包括一个 AI_GUIDE.md,以便 AI 职责在出现问题时帮助你调试 it.

与其他 glibc 分发(Ubuntu,Fedora)相比,需要进行少量包名修改。许可证为 MIT。