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

如何阻止Unity中VR相机画面镜像至主显示器?

解决方案:让VR相机仅输出至Oculus头显,停止主屏幕镜像渲染

针对Unity 2022.3.9f1 + OpenXR + Oculus Rift的场景,以下几种方案可以彻底停止VR相机向主屏幕的冗余渲染,同时保留你已实现的主显示器自定义UI+小窗口VR画面功能:

方案1:通过OpenXR配置直接关闭镜像

这是最直接的官方解决方案,无需编写代码:

  • 打开Edit > Project Settings > XR Plug-in Management > OpenXR
  • 切换到Features标签页,展开Oculus Feature Group
  • 找到Mirror Mode选项,将其设置为Disable

该设置会让OpenXR runtime停止将VR相机画面镜像到主显示器,从根源上消除冗余渲染。

方案2:脚本强制VR相机仅服务XR设备

如果OpenXR配置无法生效,可以通过脚本控制VR相机的渲染逻辑,确保它只在XR渲染周期内工作,不触碰主显示器的帧缓存:

using UnityEngine;
using UnityEngine.XR;

[RequireComponent(typeof(Camera))]
public class VRHeadsetExclusiveCamera : MonoBehaviour
{
    private Camera _vrCamera;
    private XRDisplaySubsystem _xrDisplaySubsystem;

    void Awake()
    {
        _vrCamera = GetComponent<Camera>();
        // 初始禁用相机,避免默认渲染到主屏幕
        _vrCamera.enabled = false;
        // 获取XR显示子系统
        _xrDisplaySubsystem = XRDisplaySubsystem.GetSubsystem<XRDisplaySubsystem>();
    }

    void OnEnable()
    {
        if (_xrDisplaySubsystem != null)
        {
            // 订阅XR渲染完成事件,仅在XR需要时渲染
            _xrDisplaySubsystem.displayRendered += OnXRRenderTrigger;
        }
    }

    void OnDisable()
    {
        if (_xrDisplaySubsystem != null)
        {
            _xrDisplaySubsystem.displayRendered -= OnXRRenderTrigger;
        }
    }

    private void OnXRRenderTrigger(XRDisplaySubsystem sender, XRDisplaySubsystem.DisplayRenderedEventArgs args)
    {
        // 临时启用相机,完成XR渲染后立即禁用
        _vrCamera.enabled = true;
        _vrCamera.Render();
        _vrCamera.enabled = false;
    }
}

将此脚本挂载到主VR相机上即可,它会让相机仅在XR头显需要渲染时工作,完全跳过主屏幕的渲染流程。

方案3:多显示配置分离VR与主屏幕渲染

通过Unity的多显示系统,将VR相机分配到XR专用显示,主屏幕仅负责UI渲染:

  • 打开Edit > Project Settings > Player > Resolution and Presentation
  • 在Display Resolution Dialog中选择Disabled
  • 将主UI相机的Target Display设置为Display 1(主显示器)
  • 将主VR相机的Target Display设置为Display 2(XR设备,需确保XR runtime已识别该显示)

此方案需要确认XR设备在Unity中被识别为第二个显示,可通过Display.displays数组在脚本中验证。

验证方法

修改后可以通过Unity的Frame Debugger(Window > Analysis > Frame Debugger)检查帧渲染流程,确认主VR相机没有向主显示器提交渲染指令,同时你的UI相机和小窗口专用相机正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:07:21