2017-03-02 74 views
1

我使用Gear VR創建項目,您可以在其中旋轉對象並根據耳機側面的輕掃和輕觸控制旋轉對象並顯示信息。Unity3D - 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.

我還沒有提到這個腳本其他地方。

當我在播放模式下檢查場景時,腳本仍然存在,變量賦值仍然存在。

任何幫助將是偉大的!

+0

您的錯誤不在GearVRTouchpad類中,它的類內使用GearVRTouchpad。如果你能提供那些拋出這個異常的東西會很好。 –

+0

我認爲可能是這種情況,但我沒有在其他腳本或文件中使用這個腳本? – Tom

回答

2

OVRTouchpad.TouchHandler是一個static EventHandler(所以它會一直持續到遊戲的一生)。您的腳本在創建時訂閱它,但在銷燬時不會取消訂閱。當您重新加載場景時,舊的訂閱仍然存在,但舊的GearVRTouchpad實例已消失。這將導致下次TouchHandler事件觸發時MissingReferenceException。添加到您的類:

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

現在,每當與GearVRTouchpad行爲GameObject被破壞,static事件OVRTouchpad將不再有對它的引用。

+1

輝煌,完美的作品。謝謝! – Tom

+0

@Tom樂意幫忙! – Foggzie