2015-12-02 540 views
1

將項目導出到Android項目後,我們將其與我們啓動遊戲的現有項目集成。這是正常工作,但Application.Quit()使整個應用程序退出,而不是隻有Unity活動。所以我們把它在一個不同的進程啓動,加入到這個清單:整合到另一個Android應用程序中的Unity Android在Application.Quit()上崩潰()

android:process=":UnityKillsMe" 

這解決了問題,但是,使用ProGuard混淆代碼後,事情停止工作。 Unity仍然正常啓動,但是當退出時,應用程序會顯示Unity停止的崩潰錯誤,即使應用程序本身仍在工作。重新啓動Unity甚至可以正常工作,但是在Application.Quit()上,仍然顯示崩潰錯誤。以下是發生錯誤時的日誌:

12-02 15:01:35.112: E/AndroidRuntime(4342): FATAL EXCEPTION: UnityMain 
12-02 15:01:35.112: E/AndroidRuntime(4342): Process: mobi.foo.touch:UnityKillsMe, PID: 4342 
12-02 15:01:35.112: E/AndroidRuntime(4342): java.lang.Error: FATAL EXCEPTION [UnityMain] 
12-02 15:01:35.112: E/AndroidRuntime(4342): Unity version  : 5.2.3f1 
12-02 15:01:35.112: E/AndroidRuntime(4342): at com.unity3d.player.UnityPlayer.nativeDone(Native Method) 
12-02 15:01:35.112: E/AndroidRuntime(4342): at com.unity3d.player.UnityPlayer.f(Unknown Source) 
12-02 15:01:35.112: E/AndroidRuntime(4342): at com.unity3d.player.UnityPlayer.g(Unknown Source) 
12-02 15:01:35.112: E/AndroidRuntime(4342): at com.unity3d.player.UnityPlayer$15.run(Unknown Source) 
12-02 15:01:35.112: E/AndroidRuntime(4342): at com.unity3d.player.UnityPlayer.executeGLThreadJobs(Unknown Source) 
12-02 15:01:35.112: E/AndroidRuntime(4342): at com.unity3d.player.UnityPlayer$b.run(Unknown Source) 
12-02 15:01:35.122: E/ActivityManager(890): App crashed! Process: mobi.foo.touch:UnityKillsMe 

這怎麼解決?什麼導致這個問題?

回答

0

我剛剛遇到了確切的問題,並設法解決它。

如果在Unity3D中調用Application.Quit(),Proguard + Unity3D將在獨立進程中啓動。

解決方案:通過本機銷燬Unity3D應用程序來退出Unity3D應用程序。

Unity3D:

// Add this code in, replace Application.Quit() to AndroidQuit() 
void AndroidQuit(){ 
    AndroidJavaClass myClass = new AndroidJavaClass("com.yourpackagenamehere.UnityPlayerActivity"); 
    AndroidJavaObject activity = myClass.GetStatic<AndroidJavaObject>("UnityActivity"); 
    activity.Call("QuitUnity"); 
} 

的Android項目:

// In UnityPlayerActivity.java 

// Declare static object for Unity to make calls from 
public static Context UnityActivity; 

// Instantiate it in the onCreate Method right after super.onCreate 
UnityActivity = this; 

// Add the following method for Unity3D function to trigger the Quit  
public void QuitUnity() { 
    android.os.Process.killProcess(android.os.Process.myPid()); 
    //finish(); 
    //this.onDestroy(); 
} 

編輯: 我已經更新了我的項目,this.OnDestroy()和完成後()將顯示一個崩潰對話框。 android.os.Process.killProcess()很好用。

但直接殺死該進程工作正常。

在附註中,崩潰的原因之一可能是由於我在logcat中使用了渲染紋理和以下統一誤差曲面。

Destroying active render texture. Switching to main context.