Unity3D - Gear VR输入在场景之间不起作用

时间:2017-03-02 15:19:28

标签: c# unity3d virtual-reality gear-vr

我正在使用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

        }
    }
}

我注意到当我开始游戏时,会创建一个OVRTouchpadHelper。我不知道这与我的问题有什么关系。

我得到的错误是:

  

MissingReferenceException: The object of type 'GearVRTouchpad' has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object.

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

当我在播放模式中检查我的场景时,脚本仍在那里,变量分配仍然存在。

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:2)

OVRTouchpad.TouchHandlerstatic EventHandler(所以它会持续整个游戏的生命周期)。您的脚本在创建时订阅它,但在销毁时不会取消订阅。当您重新加载场景时,旧订阅仍在事件中,但旧的GearVRTouchpad实例已消失。这将导致MissingReferenceException下次TouchHandler事件触发时void OnDestroy() { OVRTouchpad.TouchHandler -= Touchpad; } 。将此添加到您的班级:

GameObject

现在,每当GearVRTouchpad行为static被销毁时,OVRTouchpad中的"data-dismiss" => "modal"事件将不会再引用它。