对于部署到Android设备的应用,如何在Unity中以编程方式将显示设置为立体?
我想要一个UI菜单,用户可以在" VR模式和#34;之间切换。和正常模式。我默认不想要VR模式,因为它应该是运行时的选项。我知道有一个设置为"支持虚拟现实"在构建设置中,但同样,我不希望默认启用此功能。
答案 0 :(得分:11)
在顶部添加using UnityEngine.XR;
。
使用空字符串调用XRSettings.LoadDeviceByName("")
,然后调用XRSettings.enabled = false;
以禁用启动功能中的VR以禁用VR。
如果您想稍后启用此功能,请使用VR名称后跟XRSettings.LoadDeviceByName("daydream")
来呼叫XRSettings.enabled = true;
。
您应该在每个函数调用之间等待一个帧。这需要做一个corutine功能。
此外,在某些VR设备上,您必须转到修改 - > 项目设置 - > 播放器,并确保< strong>支持虚拟现实复选框已检查(true),然后才能生效。然后,您可以在“开始”功能中将其禁用,并随时启用它。
修改强>:
众所周知,这适用于某些VR设备而非所有VR设备。虽然,它应该适用于Daydream VR。完整的代码示例:
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));
}
致电EnableVR()
启用vr,DisableVR()
启用vr。如果您使用的是白日梦以外的任何内容,请将该VR设备的名称传递给LoadDevice
功能中的EnableVR()
功能。
答案 1 :(得分:2)
对于较新版本的Unity(例如2019.4.0f1),您可以使用XR Plugin Management软件包。
启用通话:
XRGeneralSettings.Instance.Manager.InitializeLoader();
要禁用通话:
XRGeneralSettings.Instance.Manager.DeinitializeLoader();
答案 2 :(得分:0)
public void Awake() {
StartCoroutine(SwitchToVR(()=>{
Debug.Log("Switched to VR Mode");
}));
//For disable VR Mode
XRSettings.enabled = false;
}
IEnumerator SwitchToVR(Action callback) {
// Device names are lowercase, as returned by `XRSettings.supportedDevices`.
// Google original, makes you specify
// string desiredDevice = "daydream"; // Or "cardboard".
// XRSettings.LoadDeviceByName(desiredDevice);
// this is slightly better;
string[] Devices = new string[] { "daydream", "cardboard" };
XRSettings.LoadDeviceByName(Devices);
// Must wait one frame after calling `XRSettings.LoadDeviceByName()`.
yield return null;
// Now it's ok to enable VR mode.
XRSettings.enabled = true;
callback.Invoke();
}