Unity響應Android的返回鍵,退出當前Activity


一:使用 Application.Quit()

public void Update() { if(Input.GetKeyDown(KeyCode.Escape)) Application.Quit(); } 

如此,Unity 就能響應 Android 的 Back 按鈕了。

 

但是!這個方法存在的問題是,退出當前 UnityPlayerActivity 的同時,會退出整個程序。因此對於想返回上一個 Activity 並不有效。

二:添加一個后退的 button 執行 mUnityPlayer.quit()

在 UnityPlayerActivity 類,存在 mUnityPlayer.quit() 方法,通過退出 unityplayer 來結束 UnityPlayerActivity。 於是就考慮在安卓端設置一個后退按鈕如圖:

設置該按鈕的監聽並執行 mUnityPlayer.quit():

bckbtn = (Button) findViewById(R.id.navigate_back); bckbtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mUnityPlayer.quit(); } }); 

這樣就能退出當前的 UnityPlayerActivity 並返回前一個 Activity 。

三:使用 Unity 調用 Android 響應 Back 按鈕

為了最終實現響應手機的系統按鍵返回前一個 Activity,在這使用到了 Unity 和 Android 的交互,通過 Unity 中的腳本響應系統按鍵,再調用 Android 函數實現返回上一個Activity。關於 Unity 調用 Android 的函數,可參考:http://www.xuanyusong.com/archives/667 。

在此,首先在 Unity 的 C# 腳本中添加如下代碼響應 Back 按鈕:

if (Input.GetKeyUp (KeyCode.Escape)) { AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity"); jo.Call ("onBackPressed"); }

在此先得到 AndroidJavaClass ,然后得到 AndroidjavaObject 就是當前 UnityPlayerActivity 的對象,拿到它的對象后調用jo.Call()參數表示調用 UnityPlayerActivity 類中的方法名稱。
於是在 UnityPlayerActivity 下實現上面的 onBackPressed() 方法,並在該方法中實現 mUnityPlayer.quit(),那么問題就搞定了,Android 端 java 代碼如下:

@Override public void onBackPressed() { runOnUiThread(new Runnable() { @Override public void run() { mUnityPlayer.quit(); } }); super.onBackPressed(); } 

這里重寫了系統的 onBackPressed() 函數。

 

就此,最終實現了 Unity 響應手機的系統返回鍵,成功返回上一級 Activity。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM