Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 谷歌纸板-如何面对同样的方式改变场景?_C#_Unity3d_Google Cardboard_Virtual Reality - Fatal编程技术网

C# 谷歌纸板-如何面对同样的方式改变场景?

C# 谷歌纸板-如何面对同样的方式改变场景?,c#,unity3d,google-cardboard,virtual-reality,C#,Unity3d,Google Cardboard,Virtual Reality,我正在创建一个虚拟现实游戏,如果用户看到一个按钮,场景就会改变 问题是,如果我使用SceneManager加载新场景,用户面对的方向将重置,使其成为新的前进方向。例如,我在用户后面有一个退出按钮。如果他们看到它,一个新的场景将加载,但新的“前进”将在他们后面,导致他们必须完全转身,以便他们的身体再次面向前方 我在网上看到了这篇文章,但这是在Unity 4中。它讨论注释掉Recenter()和device.Reset() 我已经重复了Unity 5(我正在使用的版本)中的步骤,但这没有效果。在Un

我正在创建一个虚拟现实游戏,如果用户看到一个按钮,场景就会改变

问题是,如果我使用
SceneManager
加载新场景,用户面对的方向将重置,使其成为新的前进方向。例如,我在用户后面有一个退出按钮。如果他们看到它,一个新的场景将加载,但新的“前进”将在他们后面,导致他们必须完全转身,以便他们的身体再次面向前方

我在网上看到了这篇文章,但这是在Unity 4中。它讨论注释掉
Recenter()
device.Reset()

我已经重复了Unity 5(我正在使用的版本)中的步骤,但这没有效果。在Unity 5 Google硬纸板脚本中,我也看不到
device.Reset()
一段代码

在播放模式下从当前场景加载新场景时,如何保持朝向同一方向

谢谢

Recenter()
是Google VR SDK最新版本上的类
GvrViewer
的一种方法,它是Google Cardward SDK的替代品

要访问它,请使用singleton实例
GvrViewer.instance
。在Carboard SDK上,可以使用
carboard.SDK.Recenter()
执行相同的任务


只需在退出时存储所有相机的位置和旋转值。在
Start
功能中加载它们。大约一年前,我做了类似的事情,并将与大家分享剧本。只需将其附加到场景中的任何游戏对象。确保将摄像头放在每个插槽中。移动摄影机,然后退出场景。下次你再玩时,它应该保持所有摄像机的位置

如果它停止工作,请调用
reset()
函数一次重置保存的数据,然后将其注释掉。只有当它停止工作时才应该调用它,这在我身上从未发生过

#define USEWITHSECENE

using UnityEngine;
using System.Collections;

public class VRCAMRESTORE : MonoBehaviour
{

    [System.Serializable]
    class VRInfo
    {
        //Transform Info
        [SerializeField]
        public Vector3 mainCameraPos;
        [SerializeField]
        public Vector3 mainCameraLeftPos;
        [SerializeField]
        public Vector3 mainCameraRightPos;
        [SerializeField]
        public Vector3 reticleUnderMainCameraPos;

        [SerializeField]
        public Vector3 PreRenderCameraUnderStereoRenderPos;
        [SerializeField]
        public Vector3 PostRenderCameraUnderStereoRenderPos;

        //Rotation Info
        [SerializeField]
        public Quaternion mainCameraRot;
        [SerializeField]
        public Quaternion mainCameraLeftRot;
        [SerializeField]
        public Quaternion mainCameraRightRot;
        [SerializeField]
        public Quaternion reticleUnderMainCameraRot;

        [SerializeField]
        public Quaternion PreRenderCameraUnderStereoRenderRot;
        [SerializeField]
        public Quaternion PostRenderCameraUnderStereoRenderRot;
    }


    public Camera mainCamera;
    public Camera mainCameraLeft;
    public Camera mainCameraRight;
    public GameObject reticleUnderMainCamera;

    public Camera PreRenderCameraUnderStereoRender;
    public Camera PostRenderCameraUnderStereoRender;

    private VRInfo vrInfo = null;
    private Transform c1, c2, c3, c4, c5, c6;

    //Use this for initialization
    void Start()
    {
        intitTransform();
        vrInfo = new VRInfo();

        //check if vrInfo exist
        string savedJsonValue = PlayerPrefs.GetString("vrInfo");
        if (savedJsonValue == null)
        {
            updateCamTransform();
            return;
        }


        //Convert back to class
        vrInfo = JsonUtility.FromJson<VRInfo>(savedJsonValue);

        //If Null, dont load the saved location
        if (vrInfo == null)
        {
            updateCamTransform();
            return;
        }

        //Load Aettings from the Savings
        loadTransform();
    }

    public void reset()
    {
        PlayerPrefs.DeleteKey("vrInfo");
    }

    void intitTransform()
    {
        c1 = mainCamera.GetComponent<Transform>();
        c2 = mainCameraLeft.GetComponent<Transform>();
        c3 = mainCameraRight.GetComponent<Transform>();
        c4 = reticleUnderMainCamera.GetComponent<Transform>();
        c5 = PreRenderCameraUnderStereoRender.GetComponent<Transform>();
        c6 = PostRenderCameraUnderStereoRender.GetComponent<Transform>();
    }

    private void loadTransform()
    {
        c1.position = vrInfo.mainCameraPos;
        c1.rotation = vrInfo.mainCameraRot;

        c2.position = vrInfo.mainCameraLeftPos;
        c2.rotation = vrInfo.mainCameraLeftRot;

        c3.position = vrInfo.mainCameraRightPos;
        c3.rotation = vrInfo.mainCameraRightRot;

        c4.position = vrInfo.reticleUnderMainCameraPos;
        c4.rotation = vrInfo.reticleUnderMainCameraRot;

        c5.position = vrInfo.PreRenderCameraUnderStereoRenderPos;
        c5.rotation = vrInfo.PreRenderCameraUnderStereoRenderRot;

        c6.position = vrInfo.PostRenderCameraUnderStereoRenderPos;
        c6.rotation = vrInfo.PostRenderCameraUnderStereoRenderRot;
    }

    bool firstRun = true;

    private void updateCamTransform()
    {
        //Prevents vrInfo == null from running every frame
        if (firstRun)
        {
            firstRun = false;
            if (vrInfo == null)
            {
                vrInfo = new VRInfo();
            }
        }

        vrInfo.mainCameraPos = c1.position;
        vrInfo.mainCameraRot = c1.rotation;

        vrInfo.mainCameraLeftPos = c2.position;
        vrInfo.mainCameraLeftRot = c2.rotation;

        vrInfo.mainCameraRightPos = c3.position;
        vrInfo.mainCameraRightRot = c3.rotation;

        vrInfo.reticleUnderMainCameraPos = c4.position;
        vrInfo.reticleUnderMainCameraRot = c4.rotation;

        vrInfo.PreRenderCameraUnderStereoRenderPos = c5.position;
        vrInfo.PreRenderCameraUnderStereoRenderRot = c5.rotation;

        vrInfo.PostRenderCameraUnderStereoRenderPos = c6.position;
        vrInfo.PostRenderCameraUnderStereoRenderRot = c6.rotation;
    }

    void saveToDrive()
    {
        string json = JsonUtility.ToJson(vrInfo);
        PlayerPrefs.SetString("vrInfo", json);
        PlayerPrefs.Save();
        Debug.Log(json);
        Debug.Log("Quit");
    }

#if USEWITHSECENE
    void Update()
    {
        updateCamTransform();
    }

    void OnDisable()
    {
        saveToDrive();
    }
#else
    //For iOS
#if UNITY_IOS
    public void OnApplicationPause(bool pauseStatus)
    {
        if (pauseStatus)
        {
            //Convert to Json and Save
            updateCamTransform();
            saveToDrive();
        }
    }
#else
    //For Other Devices 
    public void OnApplicationQuit()
    {
        //Convert to Json and Save
        updateCamTransform();
        saveToDrive();
    }
#endif
#endif
}
#定义USEWITHSECENE
使用UnityEngine;
使用系统集合;
公共类:单行为
{
[系统可序列化]
类别VRInfo
{
//转换信息
[序列化字段]
公共矢量器3主摄像机;
[序列化字段]
公共矢量器3主摄像机;
[序列化字段]
公共Vector3主摄像机右位;
[序列化字段]
公共矢量3网线摄像机;
[序列化字段]
公共矢量3预渲染器渲染器渲染器立体渲染器;
[序列化字段]
公共矢量3后期渲染器渲染器立体渲染器;
//轮换信息
[序列化字段]
公共四元数主摄像机;
[序列化字段]
公共四元数主摄影机快步;
[序列化字段]
公共四元数主摄像机;
[序列化字段]
公共四元数网线;
[序列化字段]
公共四元数预渲染器;
[序列化字段]
公共四元数PostRenderCameraunderStereRenderRot;
}
公共摄像机;
公共摄像机;
公共摄像机;
公共游戏对象网线摄像头;
公共摄像机预渲染器摄像机立体渲染器;
公共相机后渲染;渲染器;立体渲染;
私有VRInfo VRInfo=null;
私有变换c1、c2、c3、c4、c5、c6;
//用于初始化
void Start()
{
初始化转换();
vrInfo=新的vrInfo();
//检查vrInfo是否存在
string savedJsonValue=PlayerPrefs.GetString(“vrInfo”);
if(savedJsonValue==null)
{
updateCamTransform();
返回;
}
//返回课堂
vrInfo=JsonUtility.FromJson(savedJsonValue);
//如果为空,则不加载保存的位置
如果(vrInfo==null)
{
updateCamTransform();
返回;
}
//从存储中加载设置
loadTransform();
}
公共无效重置()
{
PlayerPrefs.DeleteKey(“vrInfo”);
}
无效初始化转换()
{
c1=mainCamera.GetComponent();
c2=mainCameraLeft.GetComponent();
c3=mainCameraRight.GetComponent();
c4=网线UnderMainCamera.GetComponent();
c5=PreRenderCameraUnderStereoRender.GetComponent()的预渲染器;
c6=PostRenderCameraUnderStereoRender.GetComponent();
}
私有void loadTransform()
{
c1.position=vrInfo.mainCameraPos;
c1.旋转=vrInfo.mainCameraRot;
c2.position=vrInfo.mainCameraLeftPos;
c2.旋转=vrInfo.main摄影机快步;
c3.position=vrInfo.mainCameraRightPos;
c3.旋转=vrInfo.mainCameraRightRot;
c4.position=vrInfo.reticleUnderMainCameraPos;
c4.旋转=vrInfo.reticleUnderMainCameraRot;
c5.position=vrInfo.prerenderCameraunderStereoreRenderPos;
c5.旋转=vrInfo.PreRenderCameraUnderStereRenderRot;
c6.position=vrInfo.PostRenderCameraUnderStereoRenderPos;
c6.rotation=vrInfo.PostRenderCameraUnderStereoRenderRot;
}
bool firstRun=true;
私有void updateCamTransform()
{
//防止vrInfo==null运行每一帧
如果(首次运行)
{
firstRun=false;
如果(vrInfo==null)
{
vrInfo=新的vrInfo();
}
}
vrInfo.mainCameraPos=c1.position;
vrInfo.mainCameraRot=c1.旋转;
vrInfo.mainCameraLeftPos=c2.position;
vrInfo.mainCameraLeftRot=c2.旋转;
vrInfo.mainCameraRightPos=c3.position;
vrInfo.mainCameraRightRot=c3.0旋转;
vrInfo.reticleUnderMainCameraPos=c4.position;
vrInfo.reticleUnderMainCameraRot=c4.0旋转;
vrInfo.PreRenderCameraUnderStereoRenderPos=c5.position;
vrInfo.PreRenderCameraUn