2016-04-24 38 views
2

我有通過應用程序鏈接從另一個Android應用程序調用的Unity應用程序。所以,我創建了Android Plugin for Unity來處理通過url發送給應用程序的參數。根據來自url的數據,我想加載Unity應用程序中定義的三個場景之一。我試圖從場景no2調用gameobject,但是我遇到了錯誤:找不到對象並且加載場景no0。從Android插件Unity的調用場景

這就是呼叫從Android插件來統一:

UnityPlayer.UnitySendMessage("ARCamera", "startScene", "some data"); 

它看起來像統一在現場NO0尋找ARCamera,它是不存在的,當然。 是否可以在構建設置中調用未定義爲開始(0)的場景?怎麼樣?

編輯:

在機器人:

public void startAppP() { 
     Log.v(TAG, "starting p"); 
     UnityPlayer.UnitySendMessage("ARCameraP", "loadScene", "sceneP"); 
    } 

以及Unity中附着在物體腳本(場景定義爲NO 3)稱爲ARCameraP:

public void loadScene(string sceneName) 
{ 
    UnityEngine.Debug.Log("HI"); 
    Application.LoadLevel(sceneName); 
} 

它使返回的SendMessage :找不到ARCameraP對象!

我使用舊版本的Unity,因爲我在使用Vuforia時遇到了一些問題。直到我將Unity降級到版本5.1.2之前,相機才顯示黑屏。

回答

2

您可以通過在傳遞給SceneManager.LoadScene(0);與加載默認場景,但你不能使用的方法SceneManager.LoadScene("defaultScene");的字符串重載版本,直到你在生成設置添加場景。

C#代碼:

public void loadScene(string sceneName) 
{ 
    SceneManager.LoadScene(sceneName); 
} 

Java代碼:

UnityPlayer.UnitySendMessage("NameOfGameObject", "loadScene", "sceneName"); 

確保場景名稱添加到構建設置。如果他們不是然後使用SceneManager.LoadScene(0);

+0

是的,我正在做這樣的事情......我發送場景的名稱,並根據名稱加載我需要的Application.LoadLevel(「nameofscene」)。但問題是Scene0總是顯示約一秒,然後是Scene2或Scene1(取決於應該開始的內容),我不想那樣做。它看起來像spash屏幕。我想直接從java代碼告訴加載哪個場景。 而且,一切都被添加到生成設置 – midnightcoffee

+0

@midnightcoffee'Application.LoadLevel(「nameofscene」)'已被棄用。 'SceneManager.LoadScene'取代了它。我的答案中的代碼將直接從Java端加載場景。創建一個名爲「NameOfGameObject」的GameObject附加一個腳本。在該腳本中,將loadScene函數放入腳本中。還可以使用我發佈的Java代碼從Java中調用它。這應該工作。如果沒有,請發佈您的Java和C#代碼以獲取進一步幫助。 – Programmer

+0

它不斷返回 SendMessage:找不到ARCameraP! 但對象是在場景中,並被稱爲像那樣 – midnightcoffee