Unity 3d转2d再转3d

时间:2024-03-26 09:58:39

我是用daydream平台测试的,目前别的平台还没有测试

大概思路是playerSettings 中设置勾选Virtual Reality Supported 后选着对应的平台这里选的是Daydream 

Unity 3d转2d再转3d

然后在转换平台时用下面的方法加载到对应的平台,

UnityEngine.XR.XRSettings.LoadDeviceByName("None")

UnityEngine.XR.XRSettings.LoadDeviceByName("daydream");

并设置UnityEngine.XR.XRSettings.enabled = true;就可以切换到vr模式了


在同一个场景中增加两个MainCamera,

Unity 3d转2d再转3d

下面把脚本附上

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.XR;


public class Manger3dTo2d : MonoBehaviour
{
    private bool is3d = true;


    public GameObject canvas;


    public GameObject mainCamare;


    public GameObject camare;


    //public GameObject evenSystem;


    public TextMesh tm;


    //public GameObject hand;
// Use this for initialization
void Start ()
{
    tm.text = XRSettings.loadedDeviceName;
    Debug.Log(XRSettings.loadedDeviceName + "333");
    is3d = true;
canvas.SetActive(false);
    camare.SetActive(false);
}

// Update is called once per frame
void Update () {
        if ((GvrControllerInput.AppButtonUp || Input.GetKeyUp(KeyCode.A)) && is3d)
    {
        canvas.SetActive(true);
        is3d = false;
            
        //UnityEngine.XR.XRSettings.enabled = false;
        XRSettings.LoadDeviceByName("None");
            Debug.Log(XRSettings.loadedDeviceName);
        tm.text = XRSettings.loadedDeviceName;
        //evenSystem.GetComponent<GvrPointerInputModule>().enabled = false;
        //evenSystem.GetComponent<StandaloneInputModule>().enabled = true;
            mainCamare.SetActive(false);
            camare.SetActive(true);
            //hand.SetActive(false);
    }
        if (GvrControllerInput.ClickButtonDown || Input.GetKeyUp(KeyCode.B))
        {
            To3d();
        }
}


    public void To3d()
    {        
        StartCoroutine(VrOn());    
    }


    IEnumerator VrOn()
    {
        XRSettings.LoadDeviceByName("daydream");
        Debug.Log(XRSettings.loadedDeviceName + "1111");
#if UNITY_EDITOR


#endif
#if UNITY_ANDROID
        yield return new WaitUntil(() => XRSettings.loadedDeviceName == "daydream");//到这一步pc不能测试了
#endif
        Debug.Log(XRSettings.loadedDeviceName + "222");
        yield return null;
        XRSettings.enabled = true;
        Debug.Log(XRSettings.loadedDeviceName);
        tm.text = XRSettings.loadedDeviceName;
        canvas.SetActive(false);
        is3d = true;
        mainCamare.SetActive(true);
        camare.SetActive(false);
        //hand.SetActive(true);
        //evenSystem.GetComponent<GvrPointerInputModule>().enabled = true;
        //evenSystem.GetComponent<StandaloneInputModule>().enabled = false;
    }


    public void ButtonClick()
    {
        Debug.Log("这是2d场景");
    }


}