You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oculus Quest 2移植VR游戏:UI按钮触发器仅编辑器可用

Oculus Quest 2构建后VR菜单触发器按钮失效问题排查与解决

问题背景

将PC独立版VR游戏移植到Oculus Quest 2平台,使用触发器脚本模拟VR菜单按钮点击,代码在Unity编辑器中正常运行,但构建为APK后触发器完全失效。先后尝试通过对象名称、标签判断触发对象,均未解决问题。

排查与解决步骤

  • 检查碰撞体与刚体配置
    Quest平台的物理碰撞检测要求比编辑器更严格:

    • 确保按钮的Collider已勾选Is Trigger;
    • 必须给控制器/手部对象添加非运动学Rigidbody(取消勾选Is Kinematic)。编辑器中可能因宽松的物理环境触发事件,但安卓构建时,无Rigidbody的对象无法触发OnTriggerEnter。
  • 改用组件类型替代名称/标签判断
    构建后对象名称、标签可能因打包优化发生变化,直接检测组件类型更可靠:
    若使用Oculus原生SDK:

    private void OnTriggerEnter(Collider other)
    {
        if (other.GetComponent<OVRController>() != null || other.GetComponent<OVRHand>() != null)
        {
            GetComponent<Button>().onClick.Invoke();
        }
    }
    

    若使用Unity XR Interaction Toolkit:

    using UnityEngine.XR.Interaction.Toolkit;
    
    private void OnTriggerEnter(Collider other)
    {
        if (other.GetComponent<XRController>() != null)
        {
            GetComponent<Button>().onClick.Invoke();
        }
    }
    
  • 验证Layer碰撞矩阵
    打开Edit > Project Settings > Physics,在Layer Collision Matrix中确认按钮所在Layer与控制器所在Layer的交互项处于勾选状态。构建时Layer配置可能被意外修改,导致碰撞检测被阻断。

  • 排查UI射线检测冲突
    若菜单为UGUI,开启的Graphic Raycaster可能与触发器检测冲突,Quest平台上UGUI射线优先级更高。可临时关闭Graphic Raycaster测试,或改用XR UI交互组件替代自定义触发器逻辑。

  • 解决代码裁剪问题
    IL2CPP构建时可能裁剪未被显式引用的代码,导致Button.onClick回调失效:

    • 临时排查:在Player Settings > Other Settings > Optimization中关闭Managed Code Stripping;
    • 最终方案:编写Link.xml文件,保留按钮回调相关代码,避免被优化。

内容的提问来源于stack exchange,提问作者Jason Arhin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 00:18:32