Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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# Unity3D-齿轮VR输入不';我不能在两个场景之间工作_C#_Unity3d_Virtual Reality_Gear Vr - Fatal编程技术网

C# Unity3D-齿轮VR输入不';我不能在两个场景之间工作

C# Unity3D-齿轮VR输入不';我不能在两个场景之间工作,c#,unity3d,virtual-reality,gear-vr,C#,Unity3d,Virtual Reality,Gear Vr,我正在使用Gear VR创建一个项目,在这个项目中,您可以旋转一个对象,并根据耳机侧面的滑动和轻触控制显示信息 一切都很好,当我使用Gear VR侧面的触摸板时,我可以旋转和选择东西,但当我更改场景并返回主菜单,然后返回到我刚刚打开的场景时,功能停止工作 我正在使用我制作的脚本: using UnityEngine; using UnityEngine.SceneManagement; using System.Collections; using System; public class G

我正在使用Gear VR创建一个项目,在这个项目中,您可以旋转一个对象,并根据耳机侧面的滑动和轻触控制显示信息

一切都很好,当我使用Gear VR侧面的触摸板时,我可以旋转和选择东西,但当我更改场景并返回主菜单,然后返回到我刚刚打开的场景时,功能停止工作

我正在使用我制作的脚本:

using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
using System;

public class GearVRTouchpad : MonoBehaviour
{
    public GameObject heart;

    public float speed;

    Rigidbody heartRb;

    void Start ()
    {
        OVRTouchpad.Create();
        OVRTouchpad.TouchHandler += Touchpad;

        heartRb = heart.GetComponent<Rigidbody>();
    }  

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.W))
        {
            SceneManager.LoadScene("Main Menu");
        }
    }


    void Touchpad(object sender, EventArgs e)
    {
        var touches = (OVRTouchpad.TouchArgs)e;

        switch (touches.TouchType)
        {
            case OVRTouchpad.TouchEvent.SingleTap:                
                // Do some stuff    
                break;      

            case OVRTouchpad.TouchEvent.Up:
                // Do some stuff
                break;
                //etc for other directions

        }
    }
}
使用UnityEngine;
使用UnityEngine.SceneManagement;
使用系统集合;
使用制度;
公共类GearVRTouchpad:单行为
{
公共游戏对象心脏;
公众浮标速度;
刚体心脏b;
无效开始()
{
OVRTouchpad.Create();
OVRTouchpad.TouchHandler+=触摸板;
heartRb=heart.GetComponent();
}  
无效更新()
{
if(Input.GetKeyDown(KeyCode.W))
{
加载场景(“主菜单”);
}
}
无效触摸板(对象发送器,事件参数e)
{
var touchs=(OVRTouchpad.TouchArgs)e;
开关(触摸。触摸类型)
{
case OVRTouchpad.TouchEvent.SingleTap:
//做点什么
打破
case OVRTouchpad.TouchEvent.Up:
//做点什么
打破
//等其他方向
}
}
}
我注意到,当我开始游戏时,会创建一个
ovrtouchpadheloper
。我不知道这是否与我的问题有关

我得到的错误是:

MissingReferenceException:类型为“GearVRTouchpad”的对象已
已被销毁,但您仍在尝试访问它。你的剧本
应该检查它是否为null,或者不应该销毁
对象。

但是我没有在其他地方引用此脚本

当我在播放模式下检查场景时,脚本仍然存在,变量赋值仍然存在


任何帮助都会很好

OVRTouchpad.TouchHandler
是一个
静态事件处理程序
(因此它将在游戏的整个生命周期中持续存在)。您的脚本在创建时订阅,但在销毁时不会取消订阅。重新加载场景时,旧订阅仍在事件中,但旧的
GearVRTouchpad
实例已不存在。这将导致下次触发
TouchHandler
事件时出现
MissingReferenceException
。将此添加到您的类:

void OnDestroy() {
    OVRTouchpad.TouchHandler -= Touchpad;
}

现在,每当具有
GearVRTouchpad
行为的
GameObject
被销毁时,
OVRTouchpad
中的
static
事件将不再引用它。

您的错误不在GearVRTouchpad类中,而在使用GearVRTouchpad的类中。如果你能提供引发此异常的脚本,那就太好了。我想可能是这样,但我没有在任何其他脚本或文件中使用此脚本?@Tom很乐意帮忙!