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

Unity 2022中Google Cardboard VR退出时关闭应用问题求助

解决Unity Google Cardboard VR切换后关闭按钮导致应用退出的问题

问题分析

你遇到的问题源于Google Cardboard的Api.IsCloseButtonPressed在非VR模式下会被系统默认处理为应用退出指令,同时现有脚本中VR模式状态的判断存在不准确的情况,导致关闭按钮的逻辑误触发。

修复方案

1. 修正VR模式状态判断

替换原有_isVrModeEnabled的实现,结合XR加载器和初始化状态,确保状态判断精准:

private bool _isVrModeEnabled
{
    get 
    { 
        var xrManager = XRGeneralSettings.Instance?.Manager;
        return xrManager != null && xrManager.isInitializationComplete && xrManager.activeLoader != null;
    }
}

2. 拦截非VR模式下的关闭按钮事件

在Update方法中限制仅VR模式响应关闭按钮,并调用Api.SkipCloseButton()阻止系统默认的退出行为:

void Update()
{
    if(_isVrModeEnabled && Api.IsCloseButtonPressed)
    {
        ExitVR();
        // 跳过系统默认的关闭按钮处理逻辑
        Api.SkipCloseButton();
    }
}

3. 完善VR退出的清理逻辑

在StopXR方法中增加Cardboard Api的关闭操作,确保完全退出VR状态:

private void StopXR()
{
    Debug.Log("Stopping XR...");
    XRGeneralSettings.Instance.Manager.StopSubsystems();
    Debug.Log("XR stopped.");

    Debug.Log("Deinitializing XR...");
    XRGeneralSettings.Instance.Manager.DeinitializeLoader();
    Debug.Log("XR deinitialized.");

    // 关闭Cardboard Api,重置状态
    Api.Close();

    _mainCamera.ResetAspect();
    _mainCamera.fieldOfView = _defaultFieldOfView;
    // 确保主相机重新启用(XR启动时可能被禁用)
    _mainCamera.enabled = true;
}

4. 检查自定义按钮绑定

如果有手动添加的“关闭VR”UI按钮,确认其点击事件仅绑定ToggleVR或ExitVR,未误绑定Application.Quit()。

验证

完成修改后,多次切换VR/普通模式测试:

  • VR模式下按Cardboard关闭按钮,应正常返回普通模式;
  • 普通模式下按Cardboard关闭按钮,应用不会退出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:17:03