Enable/Disable VR from code

I'm using Unity 2021 but this probably works in earlier versions, I'm also using XR Plug-in Management.

Start: XRGeneralSettings.Instance.Manager.StartSubsystems();

Stop: XRGeneralSettings.Instance.Manager.StopSubsystems();

Full documentation at: https://docs.unity3d.com/Packages/[email protected]/manual/EndUser.html


Include using UnityEngine.XR; at the top.

Call XRSettings.LoadDeviceByName("") with empty string followed by XRSettings.enabled = false; to disable VR in the start function to disable VR.

When you want to enable it later on, call XRSettings.LoadDeviceByName("daydream") with the VR name followed by XRSettings.enabled = true;.

You should wait for a frame between each function call. That requires this to be done a corutine function.

Also, On some VR devices, you must go to Edit->Project Settings->Player and make sure that Virtual Reality Supported check-box is checked(true) before this will work. Then you can disable it in the Start function and enable it whenever you want.

EDIT:

This is known to work on some VR devices and not all VR devices. Although, it should work on Daydream VR. Complete code sample:

IEnumerator LoadDevice(string newDevice, bool enable)
{
    XRSettings.LoadDeviceByName(newDevice);
    yield return null;
    XRSettings.enabled = enable;
}

void EnableVR()
{
    StartCoroutine(LoadDevice("daydream", true));
}

void DisableVR()
{
    StartCoroutine(LoadDevice("", false));
}

Call EnableVR() to enable vr and DisableVR() to disable it. If you are using anything other than daydream, pass the name of that VR device to the LoadDevice function in the EnableVR() function.


For newer builds of Unity (e.g. 2019.4.0f1) you can use the XR Plugin Management package.

To enable call:

XRGeneralSettings.Instance.Manager.InitializeLoader();

To disable call:

XRGeneralSettings.Instance.Manager.DeinitializeLoader();